oracle union 和 OR 的效率问题 不解

zzbkkkk 2011-07-20 04:34:47
第一条SQL:
Select App.a, App.b, App.c, App.d,
From Approver App
Where (Exists (Select 'exists' From Costcenter t Where t.Cc_Status = '0' And t.a = App.a And t.b = App.b And t.c = App.c) Or
Not Exists (Select 'exists' From cstcenter t Where t.Cc_Status = '1' And t.a = App.a And t.b = App.b)) And App.Cac_Flag = 0;

第二条 SQL:
Select App.a, App.b, App.c, App.d,
From Approver App
Where Exists
(Select 'exists' From Costcenter t Where t.Cc_Status = '0' And t.a = App.a And t.b = App.b And t.c = App.c)

Union

Select App.a, App.b, App.c, App.d,
From Approver App
Where Not Exists
(Select 'exists' From cstcenter t Where t.Cc_Status = '1' And t.a = App.a And t.b = App.b) And App.Cac_Flag = 0;


为什么我执行第一条的时候执行时间是
10分钟
但是用 union 执行的 只需要
不到 1秒

在项目中还有很多其他地方也会出现这种效率问题,求解。

其中 Approver 表 5W 数据 cstcenter 表数据3W

都没有用到索引。
...全文
361 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
amdgaming 2011-07-26
  • 打赏
  • 举报
回复
http://www.uplook.cn/index-Index-arclist-list338.html
amdgaming 2011-07-26
  • 打赏
  • 举报
回复
这就是奇怪的or啊

可能没有走索引。。。
hanzs 2011-07-20
  • 打赏
  • 举报
回复
光看10分钟与1秒不能说明问题

具体还得看下两者的执行计划有何区别~~~

17,086

社区成员

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

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