SQL优化-大数据量分页优化


  百万数据量SQL,在进行分页查询时会出现性能问题,例如我们使用PageHelper时,由于分页查询时,PageHelper会拦截查询的语句会进行两个步骤

  1.添加 select count(*)from (原查询sql) ,用于统计查询的总数

  2.拼接 limit startPage,number 用于分页

  

  此时有两个问题

    第一个问题是:

      用于统计的 select count(*)from (原查询sql)在数据量大时速度慢

    第二个问题时:

      limit startPage,number 在大数据量时效率低

  

  解决方案:

    第一个问题:

      在数据量过大时,不使用分页插件PageHelper,select count(*)from (原查询sql)固定返回一个固定值给到前端,例如千万级数据,固定返回1千万

    第二个问题:

      在数据量过大时,不使用分页插件PageHelper ,使用join或者子查询去优化

      例如 id为主键,name为非唯一索引

        优化前:

        select id,name,brand from table where name=‘xxx’ limit 100000,10

        优化后:

        select aa.id,name,brand from table inner join (select id from table bb where name ='xxx' limit 100000,10) bb where aa.id=bb.id

        原因是解决

          非聚簇索引的叶子节点是聚簇索引的节点值,聚簇索引的叶子节点值才是数据的物理位置,

        优化前会花费大量的随机IO到找到聚簇索引,优化后则减少了寻找聚簇索引位置的时间;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM