powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Удаление 10000 записей из таблицы
8 сообщений из 8, страница 1 из 1
Удаление 10000 записей из таблицы
    #32435960
Nikita Krivtsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, подскажите:

Есть такая задача:
удалить из таблицы А строки, у которых поле 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, или так сойдёт ;) ?
...
Рейтинг: 0 / 0
Удаление 10000 записей из таблицы
    #32435981
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delete from A
inner join B on A.ID = B.ID


posle udaleniya bolshogo kolichestva zapisey prooptimizirovat tablicu krayne zhelatelno
...
Рейтинг: 0 / 0
Удаление 10000 записей из таблицы
    #32436029
Nikita Krivtsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то не работает такая конструкция......

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
...
Рейтинг: 0 / 0
Удаление 10000 записей из таблицы
    #32436039
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значить, в этой версии так низя...

Nikita Krivtsov1. выбрать совпадающие айдишники из 2х таблиц, положить их в массив. Массив преобразовать в строку (123, 124, 345, .... 34567)
2. Выполнить Delete from table A where ID in (123, 124, 345, .... 34567)

нет, лучше (оптимальней) в первом пункте в цикле выбирать по одному айдишнику, а затем удалять внутри цикла по одной записи из другой таблицы. и память не загрузиться миллионом айдишников, и ограничение на in() не сработает.
...
Рейтинг: 0 / 0
Удаление 10000 записей из таблицы
    #32436081
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 :-)))
...
Рейтинг: 0 / 0
Удаление 10000 записей из таблицы
    #32436212
Nikita Krivtsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лучше (оптимальней) в первом пункте в цикле выбирать по одному айдишнику, а затем удалять внутри цикла по одной записи из другой таблицы. и память не загрузиться миллионом айдишников, и ограничение на in() не сработает.

Господа всем спасибо, кажется придумал решение.

Как и сказано выше: сделать всё в цикле, но не удалять каждую запись отдельно а группировать, (скажем по 500 штук) и потом один DELETE на эти 500 записей.
Мне кажется так побыстрее это все отработает и нагрузка на БД будет поменьше.

Но если я правильно читал про оптимизацию работы с БД, то ощутимое время в запросе занимает установка соединения, подготовка запроса , короче много времени уходит на предварительную подготовку действия, а само действие (к примеру удаление) выполняется довольно быстро, поэтому группируя в кучки по 500 штук быстрее пройдет процедура удаления.

Как вам такие мысли??
...
Рейтинг: 0 / 0
Удаление 10000 записей из таблицы
    #32436530
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> короче много времени уходит на предварительную подготовку действия, а само действие (к примеру удаление)

неее, ты просто в цикле не отключайся-подключайся ("установка соединения"), а вокруг цикла, а в остальном отдельными дилитами лучше делать, чем с IN. это в принципе то же самое сервер будет делать внутри себя, разницы не будет особой.

подготовка запроса в мойсквеле (тем более у того, что без транзакций) очень дешева, обычно никто об этом не задумывается даже в веб-приложениях
...
Рейтинг: 0 / 0
Удаление 10000 записей из таблицы
    #32437380
Nikita Krivtsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, огромное всем спасибо за ответы! Теперь то я знаю как побороть этот мускль :)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Удаление 10000 записей из таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]