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...