数据库在分页查询的过程中, 超大偏移量导致的慢查询, 如何处理?
1.使用自连表查询
1
2
-- 使用 limit 对主键做快速定位, 在通过关联查询, 查询记录
SELECT * FROM table1 AS t1 JOIN ( SELECT id FROM table1 LIMIT 0, 50) AS t2 ON t1.id = t2.id;
2.对于递进查询, 可以使用索引定位
1
2
-- id 是递增关系, 可使用上一次记录的最后一条记录的 ID 来快速定位
SELECT * FROM table1 WHERE id >= 111111 LIMIT 50;
3.组合 1 和 2
1
SELECT * FROM table1 AS t1 JOIN ( SELECT id FROM table1 where id >= 111111 LIMIT 50) AS t2 ON t1.id = t2.id;
上述两种操作, 核心原理就是规避回表, 尽可能使用索引定位。