mysql 中 exists 與 in 的底層分析

2021-09-02 12:27:33 字數 282 閱讀 1418

in 雖然和 or 有一定的區別,但單從整體邏輯和執行計畫來看,相差無幾,所以關於 in 的使用,巨集觀是可以看成(...or ...or......)

in : 把外表和內錶作hash 連線

exists : 對外表作loop迴圈,每次loop迴圈再對內表進行查詢 

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

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

MySQL中exists與in的使用

exists對外表用loop逐條查詢,每次查詢都會檢視exists的條件語句,當 exists裡的條件語句能夠返回記錄行時 無論記錄行是的多少,只要能返回 條件就為真,返回當前loop到的這條記錄,反之如果exists裡的條 件語句不能返回記錄行,則當前loop到的這條記錄被丟棄,exists的條件...

MySQL中exists與in的使用

總結 當涉及到外表和子查詢時,要考慮到exists和in 的選擇 exists的子句是乙個boolean條件,這個子句當能返回結果集則為true,不能返回結果集則為 false,子句為真所的記錄會被加入結果集,子句為假所的記錄被拋棄結果集為空 in查詢相當於多個or條件的疊加,in查詢就是先將子查詢...

mysql中exists與in的使用

exists對外表用loop逐條查詢,每次查詢都會檢視exists的條件語句,當exists裡的條件語句能夠返回記錄行時 無論記錄行是多少,只要能返回 條件就為真,返回當前loop到的這條記錄,反之如果exists裡的條件語句不能返回記錄行,則當前loop到的這條記錄被丟棄,exists的條件就像乙...