我已經在MySQL 5.0,5.1,5.5上測試了以下看似簡單的查詢,發現它非常慢。MySQL子查詢真的很慢...解決方法?
select * from entry where session_id in
(select session_id from entry where created_at > [some timestamp])
多個條目可以具有相同的會話ID,但具有不同的created_at時間戳。 該查詢旨在獲取所有條目的來自同一個session_id,其created_at大於指定時間戳的至少一個條目。
我已經看到其他人談到類似查詢的MySQL子查詢性能問題,並且MySQL認爲子查詢是一個依賴查詢,並且它正在對外部查詢執行全表掃描。建議的解決方法是這樣的:
select * from entry where session_id in
(select session_id from
(select session_id from entry where created_at > [some timestamp])
as temp)
但是,這種黑客不適合我,並使其更慢。
有關如何重寫此查詢的任何想法?
你達人。謝謝! 我從第二個查詢開始,但忽略了不同。我不知道你可以使用通配符將不同的結果應用於整個結果集。真棒。 – n00b 2011-05-13 22:05:28