mysql中的in語句是把外表和內表作hash 連接,而exists語句是對外表作loop循環,每次loop循環再對內表進行查詢。
一直大家都認為exists比in語句的效率要高,這種說法其實是不準確的。
這個是要區分環境的。
1. 如果查詢的兩個表大小相當,那么用in和exists差別不大。
2. 如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in。
3. not in和not exists:如果查詢語句使用了not in,那么內外表都進行全表掃描,沒有用到索引;
而not extsts 的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。