繁体   English   中英

为什么此查询需要整天在mysql上运行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM