2014-03-29 86 views
0

我有以下查询需要几分钟才能在运行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; 

查询几分钟运行,最终我得到这个错误:

Incorrect key file for table '/tmp/#sql_4f0_1.MYI'; try to repair it

能有人帮我,告诉我有什么不对?

+0

谁知道?请张贴您的架构。 – 2014-03-29 01:46:26

+0

如果您对检索日期设置了限制并检查返回的行以确保它们符合您的期望,它可能会有所帮助。此外,分别测试子查询以确保其按预期工作。 –

回答

0

我还没有测试这一点,但尝试将查询更改为

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 (

希望它有助于

相关问题