例:
1、select * from tab_1 a inner join tab_2 b on a.id = b.cid and b.name = '張'
2、select * from tab_1 a inner join tab_2 b on a.id = b.cid where b.name = '張'
第一種是在on后面寫and,第二種直接寫where,我感覺這兩種查詢出來的結果應該是一樣的,都是對查詢出來的結果進行篩選,但是執行之后差距很大,有沒有大佬能解釋一下呢?
uj5u.com熱心網友回復:
1、select * from tab_1 a inner join tab_2 b on a.id = b.cid and b.name = '張'如果 b.name 有合理的索引 on 是會在 join 之前篩選的。
比如會按照下列步驟查詢:
(1) select * from tab_2 b where b.name='張' 變成b表
(2)join on a.id = b.id
所以,如果and條件中有較好的索引可以大幅度去重,那么這種方法是會快很多的。
2、select * from tab_1 a inner join tab_2 b on a.id = b.cid where b.name = '張'
這種方式就是先 a 和 b的全表join,然后得出的結果集 再去篩選 b.name ='張',自然感覺就慢不少
理論是這樣,但現在有些優化器非常強大,可能2的方式 也會被參考到1的執行計劃方式去
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/244962.html
標籤:基礎類
上一篇:有沒有會密碼學仿真的
下一篇:Sqlserver查詢速度奇慢
