当前位置: 首页 > news >正文

SQL优化之深度分页优化方案详解——延迟游标分页

        延迟游标又称为基于基于键集的分页,是一种深度分页优化技术,它通过依赖排序字段(通常是唯一且有序的字段,如主键id或时间戳created_at)来实现高效分页查询。

什么是延迟游标分页?

        延迟游标分页的核心思想是根据当前页的最后一条记录的标识,直接查询下一页的记录,而非依赖offset来跳过大量的记录(仍然会遍历一遍)。

        与传统的LIMIT ... OFFSET ...分页不同,延迟游标分页不需要跳过前面多余的行,因此可以有效解决因深度分页而导致的查询效率急剧下降的问题。

传统分页与延迟游标分页的区别

传统分页:使用LIMITOFFSET,如:

select * from products order by created_at limit 20 offset 1000;

        这条sql语句会跳过前1000条记录,返回第10001条到第1020条记录,结果按created_at排序。当offset增大时,分页越深,查询越慢。

延迟游标分页:

select * from products where created_at > 'last_timestamp' order by created_at limit 20;

        其中last_timestamp是上一页最后一条记录的created_at时间戳。记录上一页最后一条记录的好处是,无论分页大小为多少,数据库只需要从上一次查询结束的地方开始查询即可,不需要跳过大量的记录,性能稳定。

为什么延迟游标分页可以在分页查询时记住上一页的最后一条记录?

        延迟游标分页能够记住上一页的最后一条记录,并在此基础上进行查询,是因为它依赖于数据库表中的某个有序且唯一的字段(通常是idcreated_at)。

        因此有序且唯一的查询字段在查询结果中是有明确顺序的,因此可以根据上一次页面的查询结果,来将该字段作为'游标',下一次查询时从游标处开始查找下一页的记录即可。

优点和缺点:
        优点:高效分页,不会随着分页深度的增加导致查询速度变慢,避免了大量不必要的查询。

        缺点:延迟游标分页要求查询数据必须基于某个有序字段,且无法实现随机跳转,无法直接跳转到具体的页面。

        针对于深度分页查询中,查询字段不是唯一且有序的情况时,无法使用延迟游标分页时,可以对字段建立索引进行查询或者为每条记录生成一个全局唯一标识(UUID),以此来进行延迟游标分页。


http://www.mrgr.cn/news/31798.html

相关文章:

  • 《重生之我在java世界做任务升级》
  • [Linux] Linux进程PCB内部信息的深入理解
  • 2024 研究生数学建模竞赛(B题)建模秘籍|WLAN组网中网络吞吐量建模|文章代码思路大全
  • 华为od技术面手撕代码 - 快排
  • C / C++的内存管理
  • 【d46】【Java】【力扣】234.回文链表
  • 初级前端面试
  • [Web安全 网络安全]-CSRF跨站请求伪造
  • Isaac Sim 跑Slam学习过程2024.9.20
  • Leetcode Hot 100刷题记录 -Day19(回文链表)
  • threejs加载高度图渲染点云,不支持tiff
  • 【项目管理进阶】风险问题
  • 【C语言进阶】文件操作
  • 如何成为有影响力的程序员?
  • 【GPL与LGPL】
  • [已更新]2024数学建模研赛华为杯E题详细思路代码成品文章研究生数学建模数模辅导
  • C++——类和对象(3)
  • lombok(注解@Getter @Setter)
  • 详细介绍MES系统的生产监控模块
  • 多线程篇七