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

在开发中为了防止一次加载太多数据到内存,对内存占用和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
相关推荐
xiaogai_gai1 分钟前
采购业务退款单同步实战:从钉钉审批流到金蝶云星空付款单
java·数据库·钉钉
AlickLbc1 小时前
DM-V8数据库证书过期处理过程记录
数据库
l1t1 小时前
DeepSeek总结的五分钟测试:Ted Dunning 谈 DuckDB 为何让分析更轻松
数据库·sql·duckdb
超级新零售1 小时前
零售 SaaS 与本地部署,技术责任边界究竟怎么分?
数据库·零售
考虑考虑1 小时前
瀚高数据库
数据库·后端·postgresql
dishugj2 小时前
oracle日志切换三条命令区别
数据库
Patrick在香港2 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
悟道书生2 小时前
(一)Navicate为什么转存结构和数据只转存表而不包含建库?
数据库·oracle
赤龙ERP3 小时前
ERP周报:连接器开闸、国产GPU进场与智能工厂253家
数据库·人工智能·大模型·rpa·erp·企业数字化·builderpattern
lusklusklusk3 小时前
SQL Server补丁版本号为什么“日期新反而版本低”?——GDR、CU、CU+GDR 版本号规则与升级路径详解
数据库