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

在开发中为了防止一次加载太多数据到内存,对内存占用和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
相关推荐
初恋叫萱萱3 小时前
基于CodeRider-Kilo和MySQL开发一款书店管理系统
数据库·mysql·产品运营
hid646637223 小时前
基于改进粒子群算法的无人机三维路径规划——MATLAB运行效果图
sql
Elastic 中国社区官方博客3 小时前
通过 Elasticsearch 中的 function score query 按利润和受欢迎程度提升电商搜索效果
大数据·数据库·elasticsearch·搜索引擎·全文检索
xiaoxue..3 小时前
二叉树深度解析:从基础结构到实战应用
javascript·数据结构·面试
qq_366336373 小时前
mysql-5.7.38-winx64.zip 启动教程(免安装版)
数据库·mysql·adb
不穿格子的程序员3 小时前
Redis篇5——Redis深度剖析:系统的“隐形杀手”——热Key与大Key问题
数据库·redis·缓存·热key·大key
·云扬·3 小时前
深入理解MySQL元数据锁(MDL):原理、问题与实践
数据库·mysql
guoyiguang23 小时前
mysql in 查询 没有限制1000个,默认是sql大小4M大小
数据库·sql·mysql
Hello.Reader3 小时前
Flink SQL 的 USE / USE CATALOG / USE MODULES(Catalog、Database、Module 三件套)
数据库·sql·flink
zandy10113 小时前
从ChatBI到自主决策:Agentic BI的演进路径与核心厂商图谱
数据库·chatbi·agentic bi