0

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

我用 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;

当我在我的工作台上运行它时,我在 10 分钟(600 秒)后得到连接丢失的错误代码。在我设置了Indexin之后Prod_ID,查询会在大约一秒(完美)内回答,在此之前,几乎不可能得到答案。也EXPLAIN PLAN可以在几秒钟内执行它。在使用索引之前,我仍然想在查询上使用 EXPLAIN 。

这里有什么想法吗?

4

1 回答 1

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

于 2013-03-24T17:56:58.203 回答