我试图弄清楚为什么查询需要这么长时间,所以我可以优化它。
我用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。
这里有什么想法吗?
答案 0 :(得分: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查询速度慢的原因。