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

在开发中为了防止一次加载太多数据到内存,对内存占用和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
相关推荐
虎虎(_ _)。゜zzZ10 分钟前
Qdrant向量数据库工程实战
数据库·人工智能·大模型·向量数据库·rag·qdrant
ZGG00335 分钟前
线程池详解:从 7 大参数到生产避坑
java·数据库·后端
龙亘川37 分钟前
数智赋能退役军人服务:V1.0 系统搭建全生命周期闭环服务体系
大数据·数据库·人工智能
刀法如飞1 小时前
《理解道德经》简版第5章:天地不仁,以万物为刍狗
面试·机器人
zhangguojia71 小时前
权限弹窗点击允许的授权流程
运维·服务器·数据库
jnrjian1 小时前
Postgres 序列(sequence)的权限
数据库·postgresql
风禾万里1 小时前
【无标题】
数据库
镜舟科技1 小时前
为什么 Text-to-SQL 总是停在 Demo?
数据库·sql·demo·text-to-sql·镜舟科技·mip·语义视图
人生苦短1281 小时前
Oracle RAC 日常管理+排错命令大全
数据库·oracle
镜舟科技2 小时前
从 DBA 经验到 Agent:镜舟如何构建生产级智能排障体系
数据库·agent·dba·skill·devops agent·mirrorship