|
Удаление 10000 записей из таблицы
|
|||
---|---|---|---|
#18+
Господа, подскажите: Есть такая задача: удалить из таблицы А строки, у которых поле ID встречается в таблице B. Пишу на ПХП MySQL версии 3.23.xx ! В таблице А 80000 строк, в таблице В 250000 строк. Насколько я понял нужно сделать в 2 этапа: 1. выбрать совпадающие айдишники из 2х таблиц, положить их в массив. Массив преобразовать в строку (123, 124, 345, .... 34567) 2. Выполнить Delete from table A where ID in (123, 124, 345, .... 34567) Как бы всё должно работать. Но! Один знакомый сказал что существует какое то ограничение на количество элементов в выражении IN (). В моем случае таких айдишников для удаления может быть от 3000 до 80000. И вот вроде бы существует ограничение по количеству , примерно 1000 штук? Что делать?? Как бы не правильно делать удаление where ID in (80000 значений, перечисленных через запятую), а как по другому сделать не могу придумать :( И кстати второй вопросик: нужно ли после этих удалений делать OPTIMIZE TABLE, или так сойдёт ;) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2004, 11:20 |
|
Удаление 10000 записей из таблицы
|
|||
---|---|---|---|
#18+
delete from A inner join B on A.ID = B.ID posle udaleniya bolshogo kolichestva zapisey prooptimizirovat tablicu krayne zhelatelno ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2004, 11:28 |
|
Удаление 10000 записей из таблицы
|
|||
---|---|---|---|
#18+
Что то не работает такая конструкция...... SQL-запрос : DELETE FROM A INNER JOIN B ON A.id = B.id Ответ MySQL: You have an error in your SQL syntax near 'INNER JOIN B ON A.id = B.id' at line 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2004, 11:46 |
|
Удаление 10000 записей из таблицы
|
|||
---|---|---|---|
#18+
значить, в этой версии так низя... Nikita Krivtsov1. выбрать совпадающие айдишники из 2х таблиц, положить их в массив. Массив преобразовать в строку (123, 124, 345, .... 34567) 2. Выполнить Delete from table A where ID in (123, 124, 345, .... 34567) нет, лучше (оптимальней) в первом пункте в цикле выбирать по одному айдишнику, а затем удалять внутри цикла по одной записи из другой таблицы. и память не загрузиться миллионом айдишников, и ограничение на in() не сработает. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2004, 11:52 |
|
Удаление 10000 записей из таблицы
|
|||
---|---|---|---|
#18+
To Nikita Krivtsov: Da, vinovat, u menya dazhe v 4.0.17 ne rabotaet takoe. select uzhe podderzhivaut s takimi konstrukciyami, a delete eshe net. Voobshem izvini eshe raz - skazyvaetsya tezheloe nasledie MSSQL :-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2004, 12:07 |
|
Удаление 10000 записей из таблицы
|
|||
---|---|---|---|
#18+
лучше (оптимальней) в первом пункте в цикле выбирать по одному айдишнику, а затем удалять внутри цикла по одной записи из другой таблицы. и память не загрузиться миллионом айдишников, и ограничение на in() не сработает. Господа всем спасибо, кажется придумал решение. Как и сказано выше: сделать всё в цикле, но не удалять каждую запись отдельно а группировать, (скажем по 500 штук) и потом один DELETE на эти 500 записей. Мне кажется так побыстрее это все отработает и нагрузка на БД будет поменьше. Но если я правильно читал про оптимизацию работы с БД, то ощутимое время в запросе занимает установка соединения, подготовка запроса , короче много времени уходит на предварительную подготовку действия, а само действие (к примеру удаление) выполняется довольно быстро, поэтому группируя в кучки по 500 штук быстрее пройдет процедура удаления. Как вам такие мысли?? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2004, 13:00 |
|
Удаление 10000 записей из таблицы
|
|||
---|---|---|---|
#18+
> короче много времени уходит на предварительную подготовку действия, а само действие (к примеру удаление) неее, ты просто в цикле не отключайся-подключайся ("установка соединения"), а вокруг цикла, а в остальном отдельными дилитами лучше делать, чем с IN. это в принципе то же самое сервер будет делать внутри себя, разницы не будет особой. подготовка запроса в мойсквеле (тем более у того, что без транзакций) очень дешева, обычно никто об этом не задумывается даже в веб-приложениях ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2004, 15:33 |
|
|
start [/forum/topic.php?fid=47&msg=32436530&tid=1855355]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 151ms |
0 / 0 |