分页查询的核心是只获取当前页面需要的数据,而不是一次性加载全部数据。这样可以提升系统性能、减少网络传输量,尤其在数据量大的场景下非常关键。实现分页主要依赖数据库的“限制返回条数”和“偏移量”功能。
1. 基础SQL分页语法(以MySQL为例)
大多数关系型数据库支持使用 LIMIT 和 OFFSET 实现分页:
SELECT * FROM table_name LIMIT page_size OFFSET offset;其中:
page_size:每页显示多少条数据 offset:跳过前面多少条数据例如,每页显示10条,查第3页:
SELECT * FROM users LIMIT 10 OFFSET 20;因为前两页共20条数据被跳过。
2. 计算分页参数
前端通常传入当前页码 page 和每页大小 size,后端计算 offset:
offset = (page - 1) * size比如 page=3, size=10,则 offset=20,与上面示例一致。
3. 返回分页结果结构
除了数据列表,还应返回总记录数,便于前端显示总页数或翻页控件:
{ "data": [...], "total": 150, "page": 3, "size": 10, "totalPages": 15 }totalPages 可通过 total / size 向上取整得到。
4. 优化建议
当数据量大时,OFFSET 越大,查询越慢,因为数据库仍需扫描前面所有行。可考虑以下优化方式:
使用主键或索引字段进行“游标分页”(Cursor-based Pagination),如:WHERE id > last_id LIMIT size 对排序字段建立索引,避免 filesort 若允许,提供“上一页/下一页”而非跳转任意页,降低数据库压力基本上就这些。分页不复杂但容易忽略性能问题,合理设计能显著提升响应速度。
