У меня должен быть простой запрос:
DELETE FROM schema_a.table_a
WHERE column_a = 'VALUE_A' AND column_b NOT IN (SELECT id FROM schema_b.table_b)
Но этот запрос выполняется очень медленно. Выполнение EXPLAIN показывает, что подзапрос имеет тип «DEPENDENT SUBQUERY», то есть он будет выполняться столько раз, сколько строк во внешнем запросе. Но почему это происходит? Я не вижу никакой связи между внутренним запросом и внешним запросом.
Интересно то, что даже я заменяю DELETE FROM на SELECT * FROM, внутренний запрос имеет тип «SUBQUERY» ->, т.е. он будет выполняться очень быстро.
Хотелось бы узнать, почему разница в EXPLAIN для этого. Любая помощь приветствуется.






попробуйте использовать НЕ СУЩЕСТВУЕТ:
DELETE FROM schema_a.table_a tbl_a
WHERE tbl_a.column_a = 'VALUE_A'
AND NOT EXISTS (SELECT 1
FROM schema_b.table_b tbl_b
WHERE tbl_b.id = tbl_a.id)
Я нашел причину, по которой это происходит. Мне нужно установить псевдоним для обеих таблиц. Если я это сделаю, то запрос станет намного быстрее и больше не будет ЗАВИСИМОЙ ПОДСКАЗКОЙ.
DELETE tbl_a FROM schema_a.table_a tbl_a
WHERE tbl_a.column_a = 'VALUE_A'
AND tbl_a.column_b NOT IN (SELECT tbl_b.id FROM schema_b.table_b tbl_b)