sql語句中in 與 exists的區別
sql中exists檢查是否有結果,判斷是否有記錄,返回的是乙個布林型(true/false);
in是對結果值進行比較,判斷乙個字段是否存在於幾個值的範圍中;
exists主要用於片面的,有滿足乙個條件的即可, in主要用於具體的集合操作,有多少滿足條件;
in適合內外表都很大的情況,exists適合外表結果集很小的情況.
如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in , 反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists。
其實我們區分in和exists主要是造成了驅動順序的改變(這是效能變化的關鍵),如果是exists,那麼以外層表為驅動表,先被訪問,如果是in,
那麼先執行子查詢,所以我們會以驅動表的快速返回為目標,那麼就會考慮到索引及結果集的關係了 ,另外in時不對null進行處理。
in 是把外表和內錶作hash 連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。
如果查詢的兩個表大小相當,那麼用in和exists差別不大。
sql語句中的exists和in
比如在northwind資料庫中有乙個查詢為 select c.customerid,companyname from customers c where exists select orderid from orders o where o.customerid c.customerid 這裡面的...
SQL點滴35 SQL語句中的exists
原文 sql點滴35 sql語句中的exists 比如在northwind資料庫中有乙個查詢為 select c.customerid,companyname from customers c where exists select orderid from orders o where o.cus...
SQL點滴35 SQL語句中的exists
原文 sql點滴35 sql語句中的exists 比如在northwind資料庫中有乙個查詢為 select c.customerid,companyname from customers c where exists select orderid from orders o where o.cus...