簡體   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