EXPLAIN PLAN需要很长时间

时间:2013-03-24 17:53:05

标签: mysql sql query-optimization sql-execution-plan full-table-scan

我试图弄清楚为什么查询需要这么长时间,所以我可以优化它。

我用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 个答案:

答案 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查询速度慢的原因。