面试——深度分页问题的优化

在开发中为了防止一次加载太多数据到内存,对内存占用和IO读取开销太大,一般使用limit关键字进行分页加载数据,在数据量比较大的时候,如果进行limit分页查询,越往后,分页查询的效率越低。

深度分页效率低的原因:
limit m, n 查询过程是数据库的服务层的执行器调用存储引擎从磁盘中读取m+n条记录到服务层,然后服务层根据offset丢掉前m条,保留第[m, m+n],n条结果,并返回给客户端返回,从磁盘中读取m+n条数据就是整个查询过程中耗时的操作。

sql 复制代码
mysql>select from text limit 0, 10;
10 rows in set (0.00 sec)
mysql>select from text limit 9000000, 10;
10 rows in set (11.00 sec)

当在进行分页查询时,如果执行limit 9000000, 10,此时需要排序前9000010条记录,仅仅返回9000000-9000010的记录,其他的记录丢弃,查询排序的代价非常大。

优化:

一般分页查询时,通过使用覆盖索引能够较好的提高性能,可以通过覆盖索引加子查询形式进行优化。通过子查询先获取要获取记录id,然后再通过条件查询去获取

sql 复制代码
select * from text
select id from text order by id limit 9000000, 10
where t.id = a.id
相关推荐
一 乐1 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
1.14(java)2 小时前
SQL数据库操作:从CRUD到高级查询
数据库
Full Stack Developme3 小时前
数据库索引的原理及类型和应用场景
数据库
IDC02_FEIYA5 小时前
SQL Server 2025数据库安装图文教程(附SQL Server2025数据库下载安装包)
数据库·windows
辞砚技术录5 小时前
MySQL面试题——联合索引
数据库·面试
小L~~~5 小时前
绿盟校招C++研发工程师一面复盘
c++·面试
萧曵 丶5 小时前
MySQL 主键不推荐使用 UUID 的深层原因
数据库·mysql·索引
小北方城市网5 小时前
分布式锁实战指南:从选型到落地,避开 90% 的坑
java·数据库·redis·分布式·python·缓存
毕设十刻6 小时前
基于Vue的人事管理系统67zzz(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
UrbanJazzerati6 小时前
解码数据分布:茎叶图和箱形图初学者指南
面试·数据分析