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

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

2025/2/7 周五

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


今天需要做一个数据量较大的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值