您现在的位置是:首页 >技术交流 >【数据库】Oracle多条件查询用OR操作和UNION ALL再去重的效率比较网站首页技术交流

【数据库】Oracle多条件查询用OR操作和UNION ALL再去重的效率比较

hanne_lovegood 2025-03-19 12:01:03
简介【数据库】Oracle多条件查询用OR操作和UNION ALL再去重的效率比较

Oracle多条件查询用OR操作和UNION ALL再去重的效率比较

2025/2/7 周五

两年多没写过博客了(实际上这两年的工作内容有些偏差,访问CSDN次数也屈指可数),都已经忘记博客怎么写了。
不过,我又回来了!


今天需要做一个数据量较大的Oracle查询,table表的数据为千万量级,且需过滤的字段均无索引。
table

原本只有t.aaa的子查询还好,后来业务要求加上t.bbb后,直接用OR合并两个条件的查询速度很慢,花了半小时才查出来:

select * from table t 
where t.aaa in (select name from names_table) 
or t.bbb in (select name from names_table);

or操作

于是尝试两个字段的条件分别过滤完使用再UNION ALL合并,并且需要DISTINCT去重,结果只花了35秒:

select distinct * from table t 
where t.aaa in (select name from names_table) 
union all 
select * from table t 
where t.bbb in (select name from names_table);

union all

由此可见,在数据量较大的情况下进行多条件查询,union all 的效率可能比 or 更高。

当然,我也尝试了直接用UNION,花了36秒,差别不大,可能是结果集较小的原因。

select * from table t 
where t.aaa in (select name from names_table) 
union
select * from table t 
where t.bbb in (select name from names_table);

union

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。