MySQL 深分页优化:LIMIT 为什么越来越慢

MySQL 深分页优化:LIMIT 为什么越来越慢 在后台管理、订单查询、文章列表等业务中,分页几乎是最常见的 SQL 场景之一。 最常见的写法是: SELECT id, title, created_at FROM articles ORDER BY id DESC LIMIT 20 OFFSET 1000000; 刚开始数据量比较小时,这种分页方式没有明显问题。但随着数据量增长,翻到后面的页码后,查询速度可能明显下降。 很多人会简单地认为: LIMIT OFFSET 会越来越慢,因为数据库扫描了很多数据。 这个说法没错,但还不够准确。真正需要理解的是:数据库为了找到第 1000001 条记录,通常仍然需要定位并跳过前面的 1000000 条符合条件的记录。 因此,深分页优化的核心并不是简单地给 LIMIT 加索引,而是要改变分页数据的定位方式。 1. 什么是深分页 假设 articles 表有 1000 万条数据: SELECT id, title, created_at FROM articles ORDER BY id DESC LIMIT 20 OFFSET 0; 查询第一页: 跳过 0 条 读取 20 条 查询第 100 页: LIMIT 20 OFFSET 1980; 需要跳过约 1980 条记录。...

2024年09月09日 · 5 min · Leanku