Общие > Базы данных
Удаление 10000 записей из таблицы
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 значений, перечисленных через запятую), а как по другому сделать не могу придумать :(
fidget:
Никакого ограничения на кол-во элементов в IN() нет.
Есть ограничение на длинну запроса.
> а как по другому сделать не могу придумать
в этой версии вы никак по другому и не сделаете. Хотите по другому - обновляйте MySQL сервер до 4.0
Nikita Krivtsov:
--- Цитировать ---fidget:
Есть ограничение на длинну запроса.
--- Конец цитаты ---
То есть отсюда следуют и что есть ограничение на количество элементов :)), так как каждый элемент это несколько символов :))
А какова эта максимальная длина запроса? Сколько символов??
fidget:
1048574 байт
Nikita Krivtsov:
А вот такой вопрос ещё:
Допустим нужно удалить 10000 записей из таблицы (у нас есть список нужных ID для удаления).
В теории как лучше всего делать:
удалить все 10000 записей в виде одного DELETE .. where id in () или сделать 10 раз DELETE и в каждом удалять по 1000 записей?
Другуми словами лучше удалить все записи за один раз, или в несколько приемов по 1000 штук за раз?
Интересует: при каком методе удаление произойдёт быстрее, и при каком методе нагрузка на сервер БД будет меньшей??
Навигация
Перейти к полной версии