Skip to content
进阶

一句话答案

深分页 LIMIT offset 越大越慢,优化方案:游标分页(WHERE id > last_id)、子查询定位起始 id、延迟关联。

核心要点

问题: LIMIT offset, size offset 越大越慢(扫描 offset+size 行只取 size 行)

优化方案:

  1. 游标分页WHERE id > last_id LIMIT 10(推荐)
  2. 子查询定位:先通过覆盖索引子查询找到起始id
  3. 延迟关联JOIN (SELECT id FROM t LIMIT 1000000,10) tmp ON t.id=tmp.id
追问与易错

追问方向:

  • 为什么 LIMIT offset 大时慢?
  • 游标分页有什么限制?
  • ES 深分页怎么处理?

易错点:

  • ❌ 加索引就能解决深分页——不能解决 offset 扫描
  • ❌ 前端不限制最大页数

💡 记忆锚点

深分页就像翻一本万页的书找第 99999 页的内容——你得从第 1 页开始数页码数到 99999 才能开始看,前面数的全浪费了。游标分页是记住上次看到哪一页直接翻过去(WHERE id > last_id),延迟关联是先在目录里定位页码再翻正文(子查询走覆盖索引找 id 再 JOIN 回表)。