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

【MySQL】3分钟解决MySQL深度分页问题

什么是深度分页问题?该如何解决呢?这篇文章展开讲讲

什么是深度分页?

当查询结果集非常大时,需要获取靠后页码的数据,比如第1000页、10000页。

如:

SELECT * FROM table LIMIT 10000, 10;  -- 获取第10001-10010条记录

深度分页的性能如何?

1.全表扫描:MySQL需要先读取10010行,然后丢弃前10000行
2.内存消耗:临时存储大量中间结果
3.IO压力:需要加载大量数据页到内存
4.响应时间:随着offset(偏移量)增大,查询时间线性增长

二、解决方案对比:

1.游标分页:

原理:记录上一页最后一条记录的ID,作为下一页的查询条件

-- 第一页
SELECT * FROM table ORDER BY id LIMIT 10;-- 后续页(假设上一页最后id=10)
SELECT * FROM table WHERE id > 10 ORDER BY id LIMIT 10;

优点:

  • 时间复杂度为O(1)
  • 无性能衰减

缺点:

  • ID必须是连续自增的
  • 不支持跳页

2.延迟关联:

原理:先通过覆盖索引获取ID,再关联原表

SELECT t.* FROM table t
JOIN (SELECT id FROM table ORDER BY col LIMIT 100000, 10) tmp
ON t.id = tmp.id;

优点:

  • 减少回表操作
  • 比LIMIT快5-10倍

缺点:

  • 需要复杂排序的分页
  • 不能使用游标分页时
http://www.xdnf.cn/news/140869.html

相关文章:

  • git 命令集
  • 【Web应用服务器_Tomcat】一、Tomcat基础与核心功能详解
  • 如何配置Spark
  • Spring-Framework源码环境搭建
  • 7.10 GitHub Sentinel CLI开发实战:Python构建企业级监控工具的5大核心技巧
  • JMeter添加HTTP请求默认值元件的作用详解
  • 百度打响第一枪!通用超级智能体时代,真的来了
  • 常用第三方库:flutter_boost混合开发
  • Android Kotlin 依赖注入全解:Koin appModule 配置与多 ViewModel 数据共享实战指南
  • 解决视频处理中的 HEVC 解码错误:Could not find ref with POC xxx【已解决】
  • 创建型设计模式之:简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式
  • 【QQMusic项目复习笔记——音乐管理模块详解】第四章
  • 1.10软考系统架构设计师:优秀架构设计师 - 练习题附答案及超详细解析
  • 时序数据库IoTDB在航空航天领域的解决方案
  • BiliNote:开源的AI视频笔记生成工具,让知识提取与分享更高效——跨平台自动生成结构化笔记,实现从视频到Markdown的智能转化
  • PT report_timing详解
  • 关于使用git init --bare 裸仓库的使用
  • 3.3 Spring Boot文件上传
  • 基于DrissionPage的表情包爬虫实现与解析(含源码)
  • python中的logging库详细解析
  • VsCode如何使用默认程序打开word Excel pdf等文件
  • 光谱相机如何提升目标检测与识别精度
  • [4A/OP]
  • 力扣-141.环形链表
  • 小白电路设计-设计11-恒功率充电电路设计
  • 【CUDA 编译 bug】ld: cannot find -lcudart
  • 代码随想录学习笔记---二叉树
  • Vue前端学习笔记
  • Redis高频面试题——String对象
  • Spring MVC 数据绑定利器:深入理解 @InitBinder