Mysql 解释计划需要多长时间

Mysql 解释计划需要多长时间,mysql,sql,query-optimization,sql-execution-plan,full-table-scan,Mysql,Sql,Query Optimization,Sql Execution Plan,Full Table Scan,我试图弄清楚为什么查询需要这么长的时间,以便优化它 我试着解释一下: 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秒)后得

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

我试着解释一下:

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秒)后得到连接丢失的错误代码。在我在
Prod\u ID
中设置了
索引之后,查询大约在一秒钟内得到了答案(完美),在此之前,几乎不可能得到答案。
而且
EXPLAIN PLAN
可以在几秒钟内执行它。 在使用索引之前,我仍然想对查询使用EXPLAIN


你知道吗

这里不需要子查询。请改用此查询:

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

是否在产品或订单行表中添加索引?我正在将订单行中的索引添加到产品ID中:ALTER table orderlines add index PROD\U ID(产品ID);嗯,我试过了,没有成功:错误代码:1054。“where子句”中的未知列“olpid”即使我不需要子项,也要使用它。我读到了解释计划,说明不要在孔数据集上运行。那么为什么它不能在几秒钟内回答呢?希望你知道我的意思谢谢,但还是有一个错误:错误代码:1052。where子句中的“prod_id”列不明确。无论如何,感谢您的帮助,不幸的是,我的主要问题是如何使用EXPLAIN(我的主查询)运行查询。答案不应该在几秒钟内出现吗?或者我遗漏了什么(查询应该保持1:1)thxI再次更新了查询。请阅读我在回答中关于EXPLAIN性能的解释。在我看来,ON子句中有一些额外的空格;我认为它应该是p.prod\u id=ol.prod\u id上的
,不,它实际上工作得很好。谢谢。更重要的是解释我的实际问题。这是最重要的部分