Oracle数据库用SQL 查询语句时使用ROWNUM取值时执行速度明显变慢的问题以及解决办法(每日学习积累)

原SQL语句情景:
语句中有表关联,有uion,还有substr都会影响查询效率。但是真正然速度慢的原因是and rownum = 1语句。
执行时间需要6秒-9秒,对于查询速度实在是不能忍。
select t.a, t.b, t.c, t.d
  from (select t1.a, t1.b, t1.c, t1.d
        from table1 t1
       where (t1.e = upper(#{e_vlaue}) or t1.e = lower(#{e_vlaue}))
      union
      select t1.a, t1.b, t1.c, t1.d
        from table2 t1,
             table3 t2
       where substr(t2.f, 0, 15) = t1.g
         and (t2.e = upper(#{e_vlaue}) or t2.e = lower(#{e_vlaue}))
         and rownum = 1
      ) t
 order by t.c desc

去掉 and rownum = 1后执行速度在1秒左右,明显效率提升。

看到有的说加上order by排序,改变其执行计划可以提升效率,自己没试过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值