解释计划需要很长时间

Posted

技术标签:

【中文标题】解释计划需要很长时间【英文标题】:EXPLAIN PLAN needs to long 【发布时间】:2013-03-24 17:53:05 【问题描述】:

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

我用 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 秒)后收到连接丢失的错误代码。在我在Prod_ID 中设置Index 后,查询会在大约一秒(完美)内回答,在此之前,几乎不可能得到答案。 EXPLAIN PLAN 也可以在几秒钟内执行它。 我仍然想在 before 使用索引的查询上使用 EXPLAIN。

这里有什么想法吗?

【问题讨论】:

您是在 product 或 orderlines 表中添加索引吗? 我将 orderlines 中的索引添加到 product_ID:ALTER TABLE orderlines add index PROD_ID(PROD_ID); 【参考方案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 查询速度慢的原因。

【讨论】:

hm 我试过了,没有成功:错误代码:1054。'where 子句'中的未知列'olpid' 即使我不需要 subqery,我也想使用它。我读到解释计划不会越过洞数据集。那么为什么它不能在几秒钟内回答呢?希望你明白我的意思 谢谢,但仍然出现错误:错误代码:1052。where 子句中的列“prod_id”不明确。无论如何,感谢您的帮助,不幸的是,我的主要问题是如何使用 EXPLAIN(我的主查询)运行查询。答案不应该在几秒钟内出现吗?或者我错过了什么。(查询应该保持 1:1)thx 我再次更新了查询。阅读我的回答中关于 EXPLAIN 性能的解释。 在我看来,ON 子句中有一些额外的空格;我觉得应该是ON p.prod_id = ol.prod_id 不,它实际上工作得很好。非常感谢。甚至更多用于解释我的实际查询。那是重要的部分。 :)

以上是关于解释计划需要很长时间的主要内容,如果未能解决你的问题,请参考以下文章

简单的选择需要很长时间才能执行

在使用 apache poi 从扩展名为 xlsx 的 Excel 文件中读取数据时,需要很长时间

Discord Bot 在第二次执行时需要很长时间

查询花费了太多时间与恼人的性能[关闭]

将视图插入表格 - 视图不需要很长时间才能运行 - 插入需要很长时间

ExportAsFixedFormat 需要很长时间[关闭]