今天做一个全量表改增量表的工作:
想找b表不在a表的那部分数据
自然而然想到的就是not in
但是实在是太慢了
搜索了可以优化的方案
not exists
select * from t where not exists (select null from t t2 where t2.y=t.x )
IN和Exists的区别
简单来说,前者是非相关子查询,子查询先执行,且只执行一次,执行完毕后将值传递给外层查询;后者是相关子查询,将外层查询的一个元组传递给内层查询,然后执行内层查询,外层查询根据返回的结果集得到满足条件的记录,重复这个过程直到外层查询的所有元组都处理完毕。
从这个过程来看,非相关子查询比相关子查询效率高。