SQL中exist和in的執行效率問題

2021-10-12 07:27:17 字數 447 閱讀 6500

select * from a where id  in(select id from b)

select a.*  from a a where exists(select 1 from b b where a.id=b.id)

結論:1、看表資料規模,a表》b表,使用in ;a表2、無論什麼情況,not exist的效率都會比not in 高。

分析:in :首先查出b表中的所有id欄位,放入記憶體中,然後遍歷a表,將id值相等的資料放入結果集;

exists:先查出a 表中所有字段,查詢where條件看是否存在於b表中,存在則將該行結果放入結果集。exists需要查詢資料庫。

如果查詢語句使用了not in 那麼內外表都進行全表掃瞄,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。

sql中in和exist語句的區別?

in和exists in 是把外表和內錶作hash 連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。如果兩個表中乙個較小,乙個是大表,則子查詢表大的用exists,子查詢錶小的用in 例如 表a 小表 表b 大表 1 select from a where cc in ...

sql中exist與in的區別

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

sql中exist與in的區別

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