[英]Why does this query take all day to run on mysql?
我有以下查询,需要几分钟才能在mysql上运行:
SELECT * FROM
sys_quote_master AS g1
JOIN (SELECT order_id, order_base_id, max(order_date_last_revised) as mostrecent
FROM sys_quote_master group by order_base_id) AS g2
ON g2.mostrecent = g1.order_date_last_revised
ORDER BY g1.order_id;
该查询运行了几分钟,最终我收到此错误:
表'/tmp/#sql_4f0_1.MYI'的密钥文件不正确; 尝试修复它
有人可以帮助我,告诉我哪里出了问题吗?
如果您解释计划,我想您会发现内部SELECT必须执行表扫描才能找到max(order_date_last_revised)。
我想知道如果您使用GROUP BY和HAVING,子查询是否会更快?
http://www.java2s.com/cn/Code/SQL/Select-Clause/GROUPandHAVINGwithsubquery.htm
请解释计划告诉您我是否正确。
我尚未对此进行测试,但尝试将查询更改为
SELECT *
FROM sys_quote_master g3
WHERE (g3.order_id, g3.order_base_id) IN (
SELECT g2.order_id, g2.order_base_id
FROM sys_quote_master g2
group by order_id, order_base_id
having max(order_date_last_revised) = (
select g1.order_date_last_revised
from sys_quote_master g1
where g2.order_id = g1.order_id
and g2.order_base_id = g1.order_base_id
)
);
假设您在(order_id,order_base_id)处也有一个索引唯一键,..也许您需要更改
having max(order_date_last_revised) = (
至
having max(order_date_last_revised) IN (
希望能帮助到你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.