oracle的EXISTS解决大表和小表的联合查询

xiaoxiao2021-02-28  38

几个数据量比较大的表跟一个数据量很小的表的联合查询 方法一: select * from tableA a,tableB b where a.aa = b.aa;这种方法是最简单的写法,其中表A数量大,大表,表B示小表 方法二: select * from tableB b where b.aa in(select a.aa from tableA a);大表和小表联合查询,应该将小表作为主表 主表是b表,a表仅仅存在于括号中,查询结果跟上面的查询是一个效果 方法三: select * from tableA b where a.aa in(select b.aa from tableB b);如果将大表作为主表,则运行时间远大于方法二 方法四:针对大表在外面,小表在里面的情况,尤其是外面的大表操作不止一个,比如跟其他表的联合查询 大表是业务表,有很多其他业务表联系,小表只是一个功能表,用于过滤筛除一些信息 用exists的写法比 select * from tableA a where ROWNUM = 1 AND EXISTS (SELECT 1 FROM tableB b WHERE b.aa = a.aa)这种方法已经比方法一效率要快很多,如果大表数量达到百万级别的话,会在秒级有很大的区别。 综上所述,方法一最原始最慢。法二和法三,法二小表主表,要快。 最后的exist针对上面说的场景是最快的,尤其数据量悬殊很大的时候。
转载请注明原文地址: https://www.6miu.com/read-1950035.html

最新回复(0)