MySQL `EXPLAIN` говорит DEPENDENT QUERY, хотя никакой корреляции не существует - PullRequest
0 голосов
/ 17 мая 2018

У меня есть то, что должно быть простым запросом:

DELETE FROM schema_a.table_a 
WHERE column_a = 'VALUE_A' AND column_b NOT IN (SELECT id FROM schema_b.table_b)

Но этот запрос очень медленный. Запуск EXPLAIN показывает, что подзапрос имеет тип «ЗАВИСИМАЯ ПОДПИСЬ», то есть он будет выполняться столько раз, сколько строк во внешнем запросе. Но почему это происходит? Я не вижу никакой связи между внутренним запросом и внешним запросом.

Интересно то, что даже если я заменим DELETE FROM на SELECT * FROM, внутренний запрос будет иметь тип "SUBQUERY" -> то есть он будет выполняться очень быстро.

Я хотел бы знать, почему разница в EXPLAIN для этого. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я нашел причину, почему это происходит.Мне нужно установить псевдоним для обеих таблиц.Если я это сделаю, то запрос станет намного быстрее и больше не будет ЗАВИСИМОЙ ОТПРАВКИ.

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)
0 голосов
/ 17 мая 2018

попробуйте использовать НЕ СУЩЕСТВУЕТ :

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...