分页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 优化。 





相关文章推荐

asp.net mvc 分页 CPager(秒杀杨涛MvcPager)之封装之后

基于路由的分页 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...
  • for_cxc
  • for_cxc
  • 2016年07月12日 16:43
  • 475

SQL海量数据库的查询优化及分页算法方案1

海量数据库的查询优化及分页算法方案随着“金盾工程”建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种、各部门。与此同时,应用系统体系的核心、系统数据的存放地――数据库也随着实际...

sql2000海量数据库的查询优化及分页算法

探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页。以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [db...

优化 | 再用传统分页SQL你就死定了

0、导读 在分页功能开发时,我们很习惯用LIMIT O,N的方法来取数据。这种方法在遇到超大分页偏移量时是会把MySQL搞死的,请别再这么写SQL了 通常,我们会采用O...

SQL Server——海量数据库的查询优化及分页算法方案

随着“金盾工程”建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种、各部门。和此同时,应用系统体系的核心、系统数据的存放地――数据库也随着实际应用而急剧膨胀,一些大规模的系统,...
  • yenange
  • yenange
  • 2011年03月09日 20:27
  • 1471

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

http://www.w17x.com/AritcleDisplay.aspx?id=661 具体如下: 如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页...

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

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

SQL优化(索引、存储过程、数据分页的存储过程)

一、索引 (一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非...

MySQL SQL优化案例:LIMIT M,N大偏移量分页

原查询语句: SELECT loan_document_id, contract_id, applicant_contract_id, buyer_id, buyer_name,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分页SQL的优化。 秒杀了。。。。
举报原因:
原因补充:

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