您现在的位置是:首页 >技术交流 >【数据库】Oracle多条件查询用OR操作和UNION ALL再去重的效率比较网站首页技术交流
【数据库】Oracle多条件查询用OR操作和UNION ALL再去重的效率比较
简介【数据库】Oracle多条件查询用OR操作和UNION ALL再去重的效率比较
Oracle多条件查询用OR操作和UNION ALL再去重的效率比较
2025/2/7 周五
两年多没写过博客了(实际上这两年的工作内容有些偏差,访问CSDN次数也屈指可数),都已经忘记博客怎么写了。
不过,我又回来了!
今天需要做一个数据量较大的Oracle查询,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);
于是尝试两个字段的条件分别过滤完使用再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 的效率可能比 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);
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。