您现在的位置是:首页 >技术教程 >【数据库】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);

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





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结