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性能。正确的分页查询方法为:
- 仅在必要时使用,尽量避免频繁分页查询;
- 合理设定每页显示行数,不要过大;
- 使用覆盖索引或合理的查询条件缩小扫描范围;
- MySQL 8.0以上版本可以考虑使用SQL标准OFFSET/FETCH语法。