目录
1. 使用索引覆盖扫描
2. 基于游标的分页(Cursor-based Pagination)
3. 延迟关联(Deferred Join)
4. 使用缓存
5. 分区表
6. 优化查询条件
7. 使用搜索引擎
总结
MySQL 深分页(如 LIMIT 1000000, 10
)会导致性能问题,因为 MySQL 需要扫描大量数据才能找到目标行。以下是解决深分页问题的常见方法:
1. 使用索引覆盖扫描
-
原理:通过索引直接定位数据,避免全表扫描。
-
实现:确保查询条件中的字段有索引,并使用
WHERE
和ORDER BY
结合索引。 -
示例:
SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 10;
-
适用场景:主键或唯一索引字段的分页。
2. 基于游标的分页(Cursor-based Pagination)
-
原理:通过记录上一页的最后一条数据的标识(如主键),直接定位下一页的起始位置。
-
实现:使用
WHERE
条件过滤掉之前的数据。 -
示例:
-- 第一页 SELECT * FROM orders ORDER BY id LIMIT 10;-- 第二页(假设上一页最后一条记录的 id 是 10) SELECT * FROM orders WHERE id > 10 ORDER BY id LIMIT 10;
-
优点:性能高,适合大数据量分页。