MySQL `EXPLAIN` сообщает ЗАВИСИМЫЙ ЗАПРОС, хотя корреляции не существует

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

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 для этого. Любая помощь приветствуется.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
28
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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)

Другие вопросы по теме