У меня была похожая проблема, и я решил сравнить два подхода, используя подготовленные операторы и драйвер 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 table WHERE id IN ().