經常有人說多表聯查會浪費很多的性能和cpu
原因是聯查時是先執行left join然后再執行where陳述句,這樣生成的臨時表資料會很大
但我測驗下來發現并不是預想的那樣...
SELECT os.id,app.id,oi.id,oo.id FROM osx as os
LEFT JOIN appx as app ON app.id = os.app_id
LEFT JOIN oix as oi ON oi.order_sn=os.order_sn
LEFT JOIN oox as oo ON oo.order_sn=os.order_sn
WHERE os.od_id BETWEEN 100 AND 110
如上查10條資料,執行時間0.01秒
其中osx/oix/oox的資料量均在100w條以上,如果按照先left join的套路,怎么也得是按秒來的吧?
是我哪里理解錯了嗎?
uj5u.com熱心網友回復:
肯定不會先聯合生成一個巨大的表再篩選的,可以了解下查詢程序相關的介紹uj5u.com熱心網友回復:
mysql join查詢會很慢,因為在8之前是沒有hash join, 建議改換寫法。uj5u.com熱心網友回復:
os 這個表先查出來, 放到臨時表, 再與其它表連接。余下就隨便你玩了。
uj5u.com熱心網友回復:
os 這個表先查出來, 放到臨時表, 再與其它表連接。余下就隨便你玩了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/77764.html
標籤:疑難問題
上一篇:SQL
下一篇:一個查詢查詢問題
