如何在mysql中实现分页查询_mysql分页查询实战方法

来源:这里教程网 时间:2026-02-28 20:35:01 作者:

MySQL分页查询最常用、最直接的方式是用 LIMITOFFSET,但实际使用中要注意性能和逻辑细节。

基础分页:LIMIT + OFFSET

语法格式为:

LIMIT offset, row_count
LIMIT row_count OFFSET offset
。比如查第2页(每页10条):

SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 10;
等价写法:
SELECT * FROM users ORDER BY id LIMIT 10, 10;

注意:OFFSET从0开始,第1页是

OFFSET 0
,第2页是
OFFSET 10
,以此类推。务必配合 ORDER BY 使用,否则结果顺序不固定,分页会错乱。

优化大偏移量分页(避免慢查询)

当页码很大(如第10000页),

OFFSET 100000
会导致MySQL扫描前10万行再丢弃,效率极低。推荐用“游标分页”(基于上一页最后一条记录的主键值):

第1页:
SELECT * FROM users ORDER BY id LIMIT 10;
第2页(假设第1页最后id=125):
SELECT * FROM users WHERE id > 125 ORDER BY id LIMIT 10;

这种方式不依赖OFFSET,只走索引范围扫描,速度稳定。适用于按主键或有唯一有序字段(如时间戳)分页的场景。

计算总页数与边界处理

前端常需显示“共XX页”,可先查总数(但大数据量慎用):

SELECT COUNT(*) FROM users WHERE status = 1;
后端根据每页条数算出总页数:
ceil(total / page_size)

更稳妥的做法是只查下一页是否存在(例如查11条,显示前10条,若第11条存在则说明还有下一页),避免COUNT全表扫描。

使用SQL_CALC_FOUND_ROWS已废弃,别再用

旧版本MySQL支持

SQL_CALC_FOUND_ROWS
配合
FOUND_ROWS()
,但自8.0.17起已被移除,且本身性能也不佳。现在统一推荐用独立COUNT语句或游标逻辑替代。

相关推荐