想把兩個表進行左連接,自己寫了兩個SQL陳述句:
第一個:select * from 表甲 left join 表乙 on 表甲.B=表乙.A
第二個:select * from 表甲 left join (select * from 表乙 where 表乙.A IN ('101',102)) on 表甲.B=表乙.A
也就是說,第二個方法是想在左連接之前,先進行一次篩選,縮減記錄范圍,再進行連接;但是要事先查出表甲的B列出現的值。
這兩個方法在執行效率上哪一個更好一些?

uj5u.com熱心網友回復:
這個要看執行計劃。另外,第一個陳述句,最后是不是也要加上 WHERE 表乙.A IN () ?
uj5u.com熱心網友回復:
explain select * from 表甲 left join 表乙 on 表甲.B=表乙.Aexplain select * from 表甲 left join (select * from 表乙 where 表乙.A IN ('101',102)) on 表甲.B=表乙.A
看一下兩個陳述句的執行計劃吧
uj5u.com熱心網友回復:
就你目前這兩個表內容, 沒什么區別uj5u.com熱心網友回復:
我這是舉個例子,實際資料遠比這復雜
uj5u.com熱心網友回復:
兩個結果的條件都不一樣,理論上條件多的,有索引且過濾效果明顯的效率好些uj5u.com熱心網友回復:
條件相同的情況下,是否高效取決于執行計劃。系統從多個執行計劃中取代價最小的那個,所以有可能執行計劃都是一樣的。uj5u.com熱心網友回復:
mysql比較笨,第二個的執行計劃必然是先執行括號中的“select * from 表乙 where 表乙.A IN ('101',102)”如果A是主鍵或唯一鍵,兩個sql差不多
如果符合這個條件的記錄很多,而表甲符合條件的記錄不多,則第一個性能更好
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/84090.html
標籤:MySQL
下一篇:sybase資料庫安裝失敗,系統是windows server R2。 錯誤提示提示: ZeroGu2: Windows DLL failed to loa
