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