SQL优化:in和exists的使用场景
- IN:当在两表查询的时候, 主表是大表(数据量多),子查询表是表(数据量少),这时,使用IN关键词进行匹配查询效率高;
- EXISTS:当在两表查询的时候, 主表是小表(数据量少),子查询表是大表(数据量多),这时,使用EXISTS关键词进行匹配查询效率高;
注意1:in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
-
not in 和 not exists 区别:
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;
而not extsts 的子查询依然能用到表上的索引。
所以无论那个表大,用not exists都比not in要快。