如何通过子查询和延迟关联技术优化MySQL大分页查询?

2026-04-24 16:311阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1025个文字,预计阅读时间需要5分钟。

如何通过子查询和延迟关联技术优化MySQL大分页查询?

MySQL中使用`LIMIT`语句时,`OFFSET`参数并非直接跳到第`OFFSET`行再取数据,而是从表头开始扫描,逐行计数,直到累计计数达到`OFFSET+size`行,然后返回这部分数据。当`OFFSET`非常大时,例如`OFFSET=100000`,它会返回从第100020条到第100120条的数据,即最后20条数据。

二级索引查ID时,再用ID回主键索引取整行,每一步都在随机IO,缓存命中率骤降,性能断崖式下滑。

SELECT * FROM t JOIN (SELECT id FROM t ... LIMIT N,M) AS tmp ON t.id = tmp.id 怎么写才真正生效

延迟关联的核心是“先轻后重”:子查询只走索引取 id,外层再按主键精准拉数据。

阅读全文
标签:Mysql

本文共计1025个文字,预计阅读时间需要5分钟。

如何通过子查询和延迟关联技术优化MySQL大分页查询?

MySQL中使用`LIMIT`语句时,`OFFSET`参数并非直接跳到第`OFFSET`行再取数据,而是从表头开始扫描,逐行计数,直到累计计数达到`OFFSET+size`行,然后返回这部分数据。当`OFFSET`非常大时,例如`OFFSET=100000`,它会返回从第100020条到第100120条的数据,即最后20条数据。

二级索引查ID时,再用ID回主键索引取整行,每一步都在随机IO,缓存命中率骤降,性能断崖式下滑。

SELECT * FROM t JOIN (SELECT id FROM t ... LIMIT N,M) AS tmp ON t.id = tmp.id 怎么写才真正生效

延迟关联的核心是“先轻后重”:子查询只走索引取 id,外层再按主键精准拉数据。

阅读全文
标签:Mysql