针对MySQL超大分页(深度分页)的性能问题,核心优化方案如下:
1. 子查询 + 覆盖索引(延迟关联)
- 原理:
- 子查询仅扫描覆盖索引(如主键),避免回表操作,显著减少I/O开销。
- 外层查询通过主键精准回表获取完整数据。
- 适用场景:中等数据量,需兼容复杂查询条件。
2. 游标分页(基于排序字段定位)
- 原理:
- 利用索引的有序性直接定位起始位置,避免扫描丢弃大量行。
- 偏移量复杂度从
O(n)
降至O(1)
。
- 适用场景:深度分页(如百万级后),要求排序字段唯一且连续。
关键补充
- 覆盖索引优化:仅查询索引包含的列,彻底避免回表。
- 避免
OFFSET
:传统LIMIT offset, size
在大偏移量时扫描offset+size
行,效率极低。
总结:优先使用游标分页(简单高效),复杂场景用延迟关联,二者均依赖索引设计。