in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
常常看见人说exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in
而not extsts 的子查询依然能用到表上的索引。
所以无论那个表大,用not exists都比not in要快。
常常看见人说exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in
而not extsts 的子查询依然能用到表上的索引。
所以无论那个表大,用not exists都比not in要快。