SQL server的Exist與in區別

2022-03-05 06:13:16 字數 486 閱讀 8211

exists:將外查詢表的每一行,代入內查詢作為檢驗,如果內查詢返回的結果取非空值,則exists子句返回true,這一行行可作為外查詢的結果行,否則不能作為結果。

區別:in表是外邊和內錶進行hash連線,是先執行子查詢。

exists是對外表進行迴圈,然後在內表進行查詢。

適用範圍:

當查詢字段進行了索引時,主表 a 大於從表 b,使用 in 子查詢效率更高,相反主表 a 小於從表 b 時,使用 exists 子查詢效率更高 

in有乙個缺陷是不能判斷null,因此如果字段存在null值,則會出現返回,因為最好使用not exists。

下面是sql server的執行計畫:

In與Exist的區別

in 遍歷 exists 檢索到滿足條件即退出 not exists 檢索到不滿足條件即退出 本質區別 exists 由於exist屬於外驅動,故會利用索引來檢索資料 in 則屬於內驅動 故不能利用索引檢索資料 其中,in和not in類似全表掃瞄,效率低,一般用 exist和notexist代替其...

Exist 與in 的區別

exist是乙個存在判斷,in是乙個集合運算子,a in 這個運算中,前面是乙個元素,後面是乙個集合,集合中的元素型別是和前面的元素一樣的.而exists是乙個存在判斷,如果後面的查詢中有結果,則exists為真,否則為假.in 運算用在語句中,它後面帶的select 一定是選乙個字段,而不是sel...

exist與in的區別

對於in 和 exists的效能區別 如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in,反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists。其實我們區分in和exists主要是造成了驅動順序的改變 這是效能變化的關鍵 如果是exists,那麼以外層表為驅動...