資料庫中IN和EXISTS的區別

2021-09-09 03:02:25 字數 872 閱讀 2070

乙個是問in exist的區別,乙個是not in和not exists的區別

把這兩個很普遍性的網友比較關心的問題總結回答一下。

in和exist的區別

從sql程式設計角度來說,in直觀,exists不直觀多乙個select,

in可以用於各種子查詢,而exists好像只用於關聯子查詢

從效能上來看

exists是用loop的方式,迴圈的次數影響大,外表要記錄數少,內錶就無所謂了

in用的是hash join,所以內錶如果小,整個查詢的範圍都會很小,如果內錶很大,外表如果也很大就很慢了,這時候exists才真正的會快過in的方式。

not in和not exists的區別

not in內外表都進行全表掃瞄,沒有用到索引;

not extsts 的子查詢能用到表上的索引。

所以推薦用not exists代替not in

不過如果是exists和in就要具體看情況了

有時間用具體的例項和執行計畫來說明。

總結:

總結:

1、 in可能被優化為 連線

2、 in

在未被優化時,外表小,內錶大時(要建臨時表並排序 耗時) 效率低

3、 exists 外表資料量大,速度肯定慢,,即使是in同樣一樣,而對於內錶資料量多少跟索引有關。

4、 in

和 exists 在外表返回的資料量很大時也是低效的。

因此,,外表(驅動表) 應該都盡可能的小。

5、 not in

不走索引的,因此不能用

6、 not exists走索引的。

資料庫中IN和EXISTS的區別

乙個是問in exist的區別,乙個是not in和not exists的區別 把這兩個很普遍性的比較關心的問題總結回答一下。in和exist的區別 從sql程式設計角度來說,in直觀,exists不直觀多乙個select,in可以用於各種子查詢,而exists好像只用於關聯子查詢 從效能上來看 e...

資料庫中的EXISTS語句

exists語句的語法 1 當exists語句中的查詢結果為非空時返回值為true 2 當exists語句中的查詢結果為空時返回值為false exists語句在關係代數中表示存在。什麼時候使用exists語句 1 首先要明確在sql server中帶有in謂詞,比較運算子的查詢語句都可以轉換成ex...

MySQL資料庫中in和exists有什麼區別

偽 如下 select from table a a where a.id in select b.id from table b b 偽 如下 select from table a a where exixts select b.id from table b b where a.id b.id...