SELECT * FROM foo f
INNER JOIN (
SELECT bar_id, MAX(revision_id) FROM bar b
GROUP BY bar_id
) t ON t.bar_id = f.bar_id
好吧,聽到這樣的問題:可以說這些表中有數百萬條記錄,我希望查詢儘可能高效。最有效的子查詢過濾器位置(GROUP BY)加入
MySQL是否將拉條表的所有記錄,然後在連接級別的ON語句而不是在子查詢中過濾它們?或者有沒有一種方法可以在JOIN過濾器之前用SQL本身過濾子查詢中的項目?
它似乎查詢所有的記錄來過濾它們將是低效的,我還沒有想到一種方法來解決這個問題。
我都試過,但子查詢中無法看到foo表:
SELECT * FROM foo f
INNER JOIN (
SELECT bar_id, MAX(revision_id) FROM bar b
WHERE b.bar_id = f.bar_id
GROUP BY bar_id
) t ON t.bar_id = f.bar_id
有沒有辦法向下傳遞ID的子查詢,我只是喜歡做的事情的最佳方式,而且我我確定有辦法做到這一點。
感謝您的回覆。
您可以添加索引來提高性能 –
您還可以發佈解釋並顯示創建表和記錄數量嗎? –