SQL in與exists查詢的區別

2021-10-04 00:28:03 字數 698 閱讀 3950

先來簡單看看兩個查詢

in:等價於:1、select sno from student where s*** in('男')    ----->先執行in中的查詢

2、select sno,cno,grade from sc where sc.sno = student.sno;

以上in()中的查詢只執行一次,它查詢出student中的所有的sno並快取起來,然後檢查sc表中查詢出的sno在快取中是否存在,如果存在則將sc的查詢資料加入到結果集中,直到遍歷sc表中所有的結果集為止。

exists:

先執行外面的sql語句,即select sno,cno,grade from sc; 將所有行查出儲存到快取中

然後將快取中的每一行都輸入exists語句中去進行運算,如果滿足就列印出那一行。

總結:mysql中的in語句是把外表和內錶作hash 連線,而exists語句是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。一直大家都認為exists比in語句的效率要高,這種說法其實是不準確的。這個是要區分環境的。

如果查詢的兩個表大小相當,那麼用in和exists差別不大。 

如果兩個表中乙個較小,乙個是大表,則子查詢表大的用exists,子查詢錶小的用in:

SQL in和exists的區別 zt

sql in和exists的區別 zt in和exists in 是把外表和內錶作hash 連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢。一直以來認為exists比in效率高的說法是不準確的。如果查詢的兩個表大小相當,那麼用in和exists差別不大。全文 in和ex...

SQL in與exists相關效能問題總結

sql in與exists相關效能問題總結 in 和 exists的是dba或開發人員日常工作學習中常用的基本運算子,今天我就這兩個所帶來的效能問題進行分析總結,方便自己與他人的後續學習與工作。先來了解in 和 exists的效能區別 如果主查詢中的表較大且又有索引,子查詢得出的結果集記錄較少時,應...

SQL IN查詢優化

實際專案中有如下sql,發現效率很低,用時超過1分鐘 select taskid,startdate min updatetime enddate max updatetime from bfdb code.dbo.packcodeinfo p inner join task t on p.task...