怎样优化这条oracle sql语句

min123 2006-12-29 03:39:00
语句如下:
select /*+user_hash(a b c)*/
b.id,
b.name,
count(c.number)
from v_useinfo a, v_info c, t_region b
where NOT EXISTS (select number
from v_pdreport
where number = a.number
and ddate >= sysdate-1
and ddate < sysdate)
and a.status in (3,4)
and a.number = c.number
and a.stype = 1
and c.id = b.id
group by b.id, b.name;
说明 表v_useinfo ,v_info ,v_pdreport数据量非常大,该怎样优化这条语句?
...全文
140 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
select /*+user_hash(a b c)*/


where NOT EXISTS (select number from v_pdreport
where number = a.number and ddate >= sysdate-1 and ddate < sysdate)

and a.status in (3,4)

這三個影響了你的性能 不用提示Oracle會自動優化 除非提示比它自己優化更好!

Not Exists 是反向原則 其數據量會非差大 當然實際數據沒有那麼大差異還是可以的。


  • 打赏
  • 举报
回复
貼出來你的執行計化
tgm78 2006-12-29
  • 打赏
  • 举报
回复
where number = a.number
and ddate >= sysdate-1
and ddate < sysdate)

改为
where ddate >= sysdate-1
and ddate < sysdate
and number = a.number)

固定的条件,尽量写在where子句的最后

一个sql最终好不好,最主要的就是,一个where条件要返回的记录数越少越好,相对于后面的条件,查找的时间就会缩短了。
还有,最终要看sql的执行计划好不好,是判断sql效率的唯一标准

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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