Oracle分页查询优化

分页优化

在程序中涉及分页SQL的一些性能问题,这里总结一下:

  1. 优化在查询列中有子查询时优化效果明显
耗时(s)不分页未处理前分页处理后分页提升
未排序0.513.90.2598%
排序0.514.250.29697.9%
  • 不分页SQL
-- 耗时0.5s
SELECT ROWNUM ROWINDEX,              
       (select tbzt
          from t_dw_sbbg_bgsblb
         where bgsbid = t.obj_id
           and bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb') tbzt
  from T_SB_ZWYC_JJ T
 WHERE 1 = 1
   AND exists (select bgsbid
          from t_dw_sbbg_bgsblb
         where bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb'
           and bgsbid = t.obj_id)
  • 未处理前的分页
-- 耗时13.9s
select *
  from (SELECT ROWNUM ROWINDEX,              
               (select tbzt
                  from t_dw_sbbg_bgsblb
                 where bgsbid = t.obj_id
                   and bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb') tbzt
          from T_SB_ZWYC_JJ T
         WHERE 1 = 1
           AND exists
         (select bgsbid
                  from t_dw_sbbg_bgsblb
                 where bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb'
                   and bgsbid = t.obj_id))
 WHERE ROWINDEX > 20
   AND ROWINDEX <= 40

  • 处理后的分页
--耗时 0.25
select *
  from (SELECT ROWNUM ROWINDEX,               
               (select tbzt
                  from t_dw_sbbg_bgsblb
                 where bgsbid = t.obj_id
                   and bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb') tbzt
          from T_SB_ZWYC_JJ T
         WHERE 1 = 1
           AND exists
         (select bgsbid
                  from t_dw_sbbg_bgsblb
                 where bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb'
                   and bgsbid = t.obj_id) and ROWNUM<= 40 )
 WHERE ROWINDEX > 20

排序

  • 不分页
-- 0.5
SELECT ROWNUM ROWINDEX,              
       (select tbzt
          from t_dw_sbbg_bgsblb
         where bgsbid = t.obj_id
           and bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb') tbzt
  from T_SB_ZWYC_JJ T
 WHERE 1 = 1
   AND exists (select bgsbid
          from t_dw_sbbg_bgsblb
         where bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb'
           and bgsbid = t.obj_id)
           order by obj_id
  • 未处理
--14.25s
select *
  from (select ROWNUM ROWINDEX, tbzt from (SELECT               
               (select tbzt
                  from t_dw_sbbg_bgsblb
                 where bgsbid = t.obj_id
                   and bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb') tbzt
          from T_SB_ZWYC_JJ T
         WHERE 1 = 1
           AND exists
         (select bgsbid
                  from t_dw_sbbg_bgsblb
                 where bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb'
                   and bgsbid = t.obj_id) order by OBJ_ID))
 WHERE ROWINDEX > 20
   AND ROWINDEX <= 40
  • 处理后
--0.296s
select *
  from ( select ROWNUM ROWINDEX, tbzt from (SELECT               
               (select tbzt
                  from t_dw_sbbg_bgsblb
                 where bgsbid = t.obj_id
                   and bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb') tbzt
          from T_SB_ZWYC_JJ T
         WHERE 1 = 1
           AND exists
         (select bgsbid
                  from t_dw_sbbg_bgsblb
                 where bgsqdid = '47c3514c-f8ba-4c13-8262-fb3553157aeb'
                   and bgsbid = t.obj_id)) where 1=1 and ROWNUM<= 40 )
 WHERE ROWINDEX > 20

如果对你有帮助请点赞哦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值