exist 和 in 到底如何選擇

2021-10-25 06:22:11 字數 2612 閱讀 8604

select sql_no_cache sum(sal) from emp where deptno in (select deptno from dept);in select sql_no_cache sum(sal) from emp where deptno in (select deptno from dept);

select sql_no_cache sum(sal) from emp where exists (select 1 from dept where emp.deptno=dept.deptno);

用 exists 是否存在,存在返回一條記錄,exists 是作為乙個查詢判斷用,所以 select 後返回什麼不重要。

exists select sql_no_cache sum(sal) from emp where exists (select 1 from dept where emp.deptno=dept.deptno);
用 exists 是否存在,存在返回一條記錄,exists 是作為乙個查詢判斷用,所以 select 後返回什麼不重要。

有索引小驅動大表 效能優於 大表驅動小表效能優於 有索引小驅動大表 效能優於 大表驅動小表

小表驅動大表,因為 join 方式需要distinct,沒有索引distinct消耗效能,所以 exist效能最佳

exist > in > join

大表驅動小表

in 和 exist 的效能效能接近,都比較糟糕, exist 稍微好一點

inner join 使用了 join buffer 會快很多

left join 則最慢

先執行外部查詢語句,然後在執行子查詢,子查詢中它每次都會去執行資料庫的查詢,執行次數等於外查詢的資料數量。查詢資料庫比較頻繁(記住這點),如果b表再id上加了索引也會走索引

先查詢 in()子查詢的資料(1次),並且將資料放進記憶體裡(不需要多次查詢),然後外部查詢的表再根據查詢的結果進行查詢過濾

exists與in的使用效率:通常情況下採用exists要比in效率高,因為in不走索引,但要看實際情況具體使用:

in適合於外表大而內錶小的情況;exists適合於外表小而內錶大的情況。

和,到底選擇誰

除了在顯而易見的 上的區別之外,這兩個產品還有什麼明顯的區別嗎?在這二者之間你是如何選擇的?讓我們看看這兩個產品的主要的不同之處,包括發行費用,效能以及它們的性。根本的區別是它們遵循的基本原則 發行費用 mysql不全是免費,但很便宜 當提及發行的費用,這兩個產品採用兩種絕然不同的決策。對於sql伺...

sql in 和 exist的區別

詳見 select from a where id in select id from b 以上查詢使用了in語句,in 只執行一次,它查出b表中的所有id欄位並快取起來.之後,檢查a表的id是否與b表中的id相等,如果相等則將a表的記錄加入結果集中,直到遍歷完a表的所有記錄.它的查詢過程類似於以下...

In和Exist的效率問題

總有人說exist效率比in高,但真得如此嗎?in select from t1 where x in select y from t2 觀察該sql可知,該查詢需要先執行子查詢,得到結果後執行外查詢。因此該sql可以轉換為 select from t1 where x y1 select from...