ОБЪЯСНИТЬ ПЛАН нужно долго
Я пытаюсь понять, почему запрос так долго, чтобы я мог оптимизировать его.
Я попробовал это с EXPLAIN:
EXPLAIN SELECT * FROM (
SELECT p.*, ol. prod_id olpid
FROM products p LEFT JOIN orderlines ol
ON p. prod_id = ol. prod_id ) pol
WHERE pol. olpid IS NULL
ORDER BY category , prod_id;
Когда я запускаю это на своем Workbench, я получаю код ошибки для соединения, потерянного через 10 минут (600 секунд). После того, как я установил Index
в Prod_ID
запрос отвечает примерно за секунду (безупречно), до этого почти невозможно было получить ответ. Также EXPLAIN PLAN
мог выполнить это за несколько секунд. Тем не менее, я хочу использовать EXPLAIN в запросе перед использованием индекса.
Есть идеи здесь?
1 ответ
Вам не нужен подзапрос здесь. Используйте этот запрос вместо:
SELECT p.*, ol.prod_id olpid
FROM products p LEFT JOIN orderlines ol
ON p.prod_id = ol.prod_id
WHERE ol.prod_id IS NULL
ORDER BY category, prod_id;
Ваш первоначальный запрос выполняется дольше, потому что вы используете подзапрос. Подзапрос должен быть выполнен полностью, затем может быть применено условие WHERE, и в конце записи упорядочены. Это также причина, почему ваш запрос с EXPLAIN идет медленно.