MySQL深分页问题
MySQL深分页问题
1. 什么是深分页问题
深分页的性能瓶颈源于MySQL处理LIMIT的机制。当执行:
1 | |
MySQL需要先定位到第1000000条记录,然后再取出接下来的20条记录。这个过程需要跳过前面的100万条记录,即使有索引,这种跳跃操作的成本也是非常高的。随着偏移量的增加,查询时间会线性增长,这就是深分页问题的根本原因。
2. 深分页问题解决方案
2.1 游标分页
游标分页是解决深分页问题最有效的方案。其核心思想是使用上一页的最后一条记录作为下一页查询的起点,避免了大偏移量的跳跃操作。
例如,如果上一页的最后一条记录ID是12345,下一页查询就变成:
1 | |
这种方式的查询时间复杂度是常数级的,不会随着页数增加而性能衰减。但游标分页也有局限性:无法随机跳转到任意页面,只能顺序翻页。
2.2 延迟关联优化
延迟关联优化适用于需要返回大量字段但只按主键排序的场景。其思路是先通过索引查询出符合条件的主键ID,然后再通过主键关联获取完整数据。比如原始查询:
1 | |
可以优化为:
1 | |
MySQL深分页问题
http://example.com/2026/01/20/MySQL深分页问题/