如何通过子查询和延迟关联技术优化MySQL大分页查询?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1025个文字,预计阅读时间需要5分钟。
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,外层再按主键精准拉数据。
本文共计1025个文字,预计阅读时间需要5分钟。
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,外层再按主键精准拉数据。

