У меня была аналогичная проблема, и решил сравните два подхода, используя подготовленные инструкции и драйвер JDBC. Мое приложение имеет 3 (сильно индексированные) таблицы. У меня есть запрос на получение списка ключей, которые мне нужно удалить из каждой таблицы (ключ индексируется во всех трех таблицах и первичный ключ в одном из них).
Сначала я попробовал:
SELECT id FROM table1 WHERE delete_condition
С
for each delete_id
DELETE FROM table1 WHERE table1.id = delete_id
DELETE FROM table2 WHERE table2.id = delete_id
DELETE FROM table3 WHERE table3.id = delete_id
loop
Я нашел это предложил стереть скорость 74 строк в секунду.
Второй подход:
DELETE FROM table2 WHERE table1.id IN (SELECT id FROM table1 WHERE delete_condition)
DELETE FROM table3 WHERE table1.id IN (SELECT id FROM table1 WHERE delete_condition)
DELETE FROM table1 WHERE table1.id IN (SELECT id FROM table1 WHERE delete_condition)
Предлагаемая на удаление скорость 43,026 строк в секунду. Я не уверен, что происходит под капотом MySQL, но теперь я буду использовать таблицу DELETE FROM WHERE id IN().
Не знаю, честно говоря, и я думаю, что это не подавляющее большинство, которое действительно это знает. Но это очень легко проверить, поэтому вы можете сказать нам, если вы доберетесь до него. –