Я предлагаю вам использовать операцию соединения вместо IN (subquery)
, и убедитесь, что соответствующий индекс (с id
в качестве ведущей колонки) доступна на table1 :
DELETE t1.*
FROM table1 t1
JOIN table2 t2
ON t2.id = t1.id
EDIT
Я не уверен, почему мой ответ получил нисходящий знак. Если это плохой ответ или бесполезен, то я бы хотел ожидать комментария относительно того, почему это плохой ответ.
Этот ответ более краток, чем большинство моих ответов; Полагаю, я мог бы объяснить, почему подходящий индекс необходим для хорошей работы.
Вопрос OP заключался в том, как «оптимизировать удаление», которое использовало предикат col IN (subquery)
. Я признаю, что я не представил объяснения по поводу , почему этот шаблон может привести к субоптимальной производительности; и почему операция соединения иногда может быть более эффективной. OP спросил «как оптимизировать собственный SQL-запрос» ... Короткий ответ заключается в повторной записи запроса.
Сколько записей в таблице2? 'id (тонны и тонны и тонны ids)' будет медленным, независимо от того, что вы делаете. –