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