如何在MySQL中实现分页查询?

MySQL可以使用LIMIT子句实现分页查询。
LIMIT语法为:

sql
SELECT * FROM table1 
LIMIT offset, count;
  • offset:起始行偏移量,指定返回行的起始位置;
  • count:返回的总行数;

例如,如果要查询第3-5行:

sql
SELECT * FROM table1 
LIMIT 2, 3;   # 跳过2行,返回3行  

常见的分页查询形式为:

sql
SELECT * FROM table1
LIMIT (page - 1) * size, size;
  • page:当前页码;
  • size:每页显示的行数;

这种写法可以根据页码和每页大小动态查询对应的数据。

例如,每页10行,查询第3页:

sql
SELECT * FROM table1
LIMIT (3 - 1) * 10, 10;  # 跳过2 * 10 = 20行,返回10行

MySQL 8.0版本以上,还支持SQL标准的OFFSET/FETCH语法:

sql
SELECT * FROM table1
OFFSET 20 ROWS 
FETCH NEXT 10 ROWS ONLY;

这与LIMIT (3 – 1) * 10, 10等效。

由于LIMIT子句在SQL执行计划的最后执行,会在满足LIMIT条件后结束查询,所以如果不适当的使用可能会影响MySQL性能。正确的分页查询方法为:

  1. 仅在必要时使用,尽量避免频繁分页查询;
  2. 合理设定每页显示行数,不要过大;
  3. 使用覆盖索引或合理的查询条件缩小扫描范围;
  4. MySQL 8.0以上版本可以考虑使用SQL标准OFFSET/FETCH语法。