大数据量分页优化,应对PageHelper

大部分时间开发的分页代码都是使用pagehelper.PageInfo分页插件来实现,简单方便 PageHelper.startPage(1, 10)

遇到百万数据量SQL,在进行分页查询时会出现性能问题,分页越深越慢
我们要知道PageHelper的分页原理是什么

  1. pageHelper 在执行时,会先计算count 数量,在通过sql拼接limit 实现分页功能,所以每次点下一页时,都会重新执行两遍SQL语句,是相当的慢。
  2. 当where条件后的结果集较大并且页数达到一个量级整个SQL的查询效率就十分低下(哪怕where的条件加上了索引也不行)

解法:

  1. 如果是管理后台的分页,提供两个接口,count计算总数的合并接口,合并接口并做缓存处理。
    前端设置请求唯一uuid,并与合计请求接口关联,这样实现的效果就是每次点击下一页时,合并接口可以快速返回缓存数据
    当下次请求发生变动时,uuid发送变化又是新的一条数据。
    当然前端也要做好接口异步加载的逻辑,分页接口返回快,优先展示分页数据,再渲染合并接口数据

这里用到的优化思想就是用缓存来空间换时间,接口并行分而治之

  1. 去掉pageHelper,自定义分页,分开定义count 和page sql语句

count sql语句,做法是返回当前搜索条件的下的count(*) , MAX(pk_id) 总数和最大的主键id

select count(*) count, MAX(pk_id) maxId
    from xx_record

page sql语句,使用join或者子查询去优化

select
    t2.*
    from xx_record t2 inner join (
        select pk_id from  xx_record t1
          WHERE  pk_id <= #{maxId}
            limit #{pageNumber},#{pageSize}
    ) a on a.pk_id = t2.pk_id
    ORDER BY  t2.pk_id

相关推荐

  1. 数据优化PageHelper

    2024-01-26 14:46:05       50 阅读
  2. SQL Server 数据

    2024-01-26 14:46:05       57 阅读
  3. PageHelper实现查询

    2024-01-26 14:46:05       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-26 14:46:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-26 14:46:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-26 14:46:05       82 阅读
  4. Python语言-面向对象

    2024-01-26 14:46:05       91 阅读

热门阅读

  1. 常见的前端打包构建工具有哪些

    2024-01-26 14:46:05       49 阅读
  2. 指针与引用的区别

    2024-01-26 14:46:05       53 阅读
  3. 前端同时上传json对象和MultipartFile文件

    2024-01-26 14:46:05       52 阅读
  4. React 表单、处理受控表单组件、非受控组件

    2024-01-26 14:46:05       45 阅读
  5. Nginx

    Nginx

    2024-01-26 14:46:05      35 阅读
  6. 前端demo: 将传入文件压缩到不超过指定大小(M)

    2024-01-26 14:46:05       53 阅读
  7. ubuntu 22.04 怎么安装websocat

    2024-01-26 14:46:05       56 阅读
  8. 【git】记录一个git error解决方法

    2024-01-26 14:46:05       54 阅读
  9. js中将回调地狱改装成promise方式的函数

    2024-01-26 14:46:05       53 阅读
  10. C语言sizeof 不是函数吗?

    2024-01-26 14:46:05       44 阅读
  11. YAML语法记录

    2024-01-26 14:46:05       55 阅读
  12. 关于SQLite 的下载与使用。配合python

    2024-01-26 14:46:05       60 阅读
  13. mysql面试题合集-分布式

    2024-01-26 14:46:05       54 阅读
  14. 玩转浏览器开发者工具

    2024-01-26 14:46:05       52 阅读