为什么Orale的Or效率那么低?我不得不用Union All来替代,这样也同样损耗了性能,求各路大神解答

行成于思毁于随 2016-03-26 12:26:13
为什么Orale的Or效率那么低?我不得不用Union All来替代,这样也同样损耗了性能,求各路大神解答


--第一种:
select * from t
where MyDate >= add_months(TO_DATE('2016-1-1','yyyy-mm-dd'),1)
and MyDate < add_months(TO_DATE('2016-1-1','yyyy-mm-dd'),2)

union all

select * from t
where MyDate >= add_months(TO_DATE('2016-1-1','yyyy-mm-dd'),5)
and MyDate < add_months(TO_DATE('2016-1-1','yyyy-mm-dd'),6)

--第二种:
select * from t
where (
MyDate >= add_months(TO_DATE('2016-1-1','yyyy-mm-dd'),1)
and MyDate < add_months(TO_DATE('2016-1-1','yyyy-mm-dd'),2)
)
or (
MyDate >= add_months(TO_DATE('2016-1-1','yyyy-mm-dd'),5)
and MyDate < add_months(TO_DATE('2016-1-1','yyyy-mm-dd'),6)
)


结果发现Union All的速度比Or还快,是Oracle解释器的问题吗?
...全文
346 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaobluesky 2016-04-01
  • 打赏
  • 举报
回复
第一种可以用索引,第二种oracle选择的执行计划应该是全表扫描,你plsql f5看下就行
rick-he 2016-03-27
  • 打赏
  • 举报
回复
单纯的看时间得不出来这个结论,看计划
lhdz_bj 2016-03-26
  • 打赏
  • 举报
回复
嗯,取下两种写法的执行计划看看。
BlueSky0524 2016-03-26
  • 打赏
  • 举报
回复
看下这两种方式的执行计划。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧