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