分页SQL的优化。 秒杀了。。。。

原创 2015年11月19日 23:15:04

 目前项目组中的 分页语句, 存在 很大问题, 按照 道理来说 分页语句首页 都不会很慢的。  结果应该是 秒出的。     但我们项目组中 的分页, 哥首次优化时候, 出现35S, 这个肯定不行的。  

   SQL 涉及到保密问题, 简写

select b.*
  from (select rownum as r, a.*
          from (select smzor.AREA_NAME, **************************
                       
                  from ST_MNTR_ZD_ORDER_REPORT smzor, dim_area da
                 where smzor.local_area_id = 3
                   and smzor.area_id = da.area_id
           
                 order by smzor.HWY_RETURN_FLAG desc,
                          smzor.HWY_RETURN_DT   desc nulls last) a) b
 where b.r >= 1
   and b.r <= 20;



   哥一看 这个SQL, 发现  dim_area   这个表莫, 很明显 这个 过滤数据用的,  测试下 果然 是的, 这个表 对于的数据是 n:1,  而且  select  后面的数据都是  zmzor 中的。

  所以 一看 改成 半连接,      再一看   order by  我靠啥需求,  明显的全表扫描,  而且还是 desc 排序, 而且还是  null  最后。关键的是    妈的  最后 r>=1 ,  r<20  , 这个肯定不合理,   要想  排序 秒出, 必须建索引了,   索引见起来  还得慎重,




 哥考虑 再三  结果 建索引   idx_lhd  ( local_area_id  ,  HWY_RETURN_FLAG  desc,   HWY_RETURN_DT,  0    )


select b.*
  from (select rownum as r, a.*
          from (select  /*+  index(   idx_lhd     smzor  )   */ smzor.AREA_NAME, **************************
                       
                  from ST_MNTR_ZD_ORDER_REPORT smzor
                 where smzor.local_area_id = 3
                   and smzor.area_id = da.area_id
                 and  exists (  select  /*+    no_unnest    */ 1 from   dim_area da   where   smzor.area_id = da.area_id     )
                 order by smzor.HWY_RETURN_FLAG desc,
                          smzor.HWY_RETURN_DT   desc nulls last) a) b
 where b.r >= 1
   and b.r <= 20;

   核对数据, 前后数据一致, 但前面的 35s 左右, 后面的 0.12s 左右 。

两次的计划



前后数据对比发现 前面扫了 很多很多, 后面 扫了 10条, 所以 哥这个改写  结果秒出了。。。。。       吼吼.......



哥当时的思路是    先是小表 驱动大表, 运用  试图推入 吧 rownum<=10  推入到扫描中,  建索引, 利用索引的有序性, 扫描数据,  如何建索引, 关键是看  过滤条件和 连接条件。    结果哥写了 好多的hint 发现 很难写出这个理想的hint,   后来 把SQL拆掉  搞了,   发现  只有 去掉  脏数据 过滤 条件  速度才提高上来。   于是哥想到了  no_unnest 这个hint  结果 给解了,   看来哥要 好好理解  这个hint 了....  确实有用的 。。。。 


    哥一直努力的方向........................SQL 优化。 





sql优化实战:从250秒+到10秒(简化语句)

今天客服又反馈了一个问题,说客户在访问后台web页面中有一个查询时非常慢,直接报了“查询超时,请联系管理员!”。 于是用客户账号登录系统,最后显示确实时超时,但是用管理员账号登录查询时,虽然返回了68...
  • yupeigu
  • yupeigu
  • 2016年11月07日 16:49
  • 1537

MySQL大数据量分页SQL语句优化

分页程序原理很简单,这里就不多说了,本篇文章主要说的是在数据表记录量比较大的情况下,如何将分页SQL做到更优化,让MySQL执行的更快的方法。 一般的情况下,我们的分页SQL语句是这样的: ...
  • scholar_man
  • scholar_man
  • 2016年03月30日 19:15
  • 1993

如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!(zz)

标签: 优化mysql数据库测试框架sqlserver 2011-05-06 18:47 4104人阅读 评论(0) 收藏 举报  分类: MySQL(8)  My...
  • qq_36276335
  • qq_36276335
  • 2017年06月27日 22:06
  • 1175

SQL server 海量数据库的查询优化及分页算法(收藏)

http://www.w17x.com/AritcleDisplay.aspx?id=661 具体如下: 如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页...
  • hliq5399
  • hliq5399
  • 2016年05月19日 09:51
  • 4419

优化使用ROWNUM进行分页查询的SQL

使用ROWNUM进行web页面分页查询的SQL写法,需要使用性能好的语法,性能差别非常大!...
  • youyonghu001
  • youyonghu001
  • 2015年04月21日 14:50
  • 970

Oracle分页查询性能优化

对于数据库中表的数据的 Web 显示,如果没有展示顺序的需要,而且因为满足条件的记录如 此之多,就不得不对数据进行分页处理。常常用户并不是对所有数据都感兴趣的,或者大部分情 况下,他们只看前几页。 通...
  • sunansheng
  • sunansheng
  • 2016年09月19日 16:10
  • 13522

sql优化-分页查询效率慢的问题分析及处理

绑定参数的sql优化。避免sql层面进行参数运算。
  • duwenchao1986
  • duwenchao1986
  • 2015年07月28日 10:59
  • 2545

MySQL order by 分页查询优化

原语句特别复杂,10多个表做关联,还有子查询,执行时间13秒多;优化后 0.208s,执行效率上提升了62.5倍....
  • khx168
  • khx168
  • 2017年06月22日 09:59
  • 197

数据库 分页优化的四种方式

很久以前读了一篇关于分页的文章,后来越想越有道理,最近又重新找出来,并做了翻译,原文参考:Four ways to optimize paginated displays.翻译背景:在大数据量的情况下...
  • qilixiang012
  • qilixiang012
  • 2015年06月04日 20:51
  • 1540

sql优化实战:从300秒+到10秒(调整参数)

今天客户反馈有一个报表运行超时。 于是登录到系统上,查到运行缓慢报表的对应sql,代码如下: SELECT f_temp_biz_date AS f_temp_biz_date , ...
  • yupeigu
  • yupeigu
  • 2016年09月09日 17:21
  • 860
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分页SQL的优化。 秒杀了。。。。
举报原因:
原因补充:

(最多只允许输入30个字)