京公网安备 11010802034615号
经营许可证编号:京B2-20210330
在后台列表、管理系统、报表页面的分页需求里,前端通常需要两份数据:当前页的分页记录、符合筛选条件的数据总条数,用来渲染分页组件(总页数、页码、跳页)。
常规写法分开执行两条 SQL:一条 limit 拿分页数据,一条 count(*) 统计总数。两次查询不仅多一次数据库 IO,还会存在数据快照不一致的问题——查询间隙新增或删除数据,就会出现总数和分页对不上。因此需要掌握 MySQL 中同时拿到分页结果与总行数的实现方式。
-- 查询分页,开启计算满足条件总行数
SELECT SQL_CALC_FOUND_ROWS id, name, create_time
FROM `order`
WHERE status = 1
LIMIT 0, 10;
-- 紧接着获取刚才统计的总行数
SELECT FOUND_ROWS();
原理:SQL_CALC_FOUND_ROWS 会让 MySQL 忽略 limit 限制,统计满足 where 条件的全部记录数量,FOUND_ROWS() 读取上一条语句计算出的总数。
缺点
适用场景:仅老旧 5.x 版本临时兼容,新项目不要使用。
”
SELECT
t.*,
(SELECT COUNT(*) FROM `order` WHERE status = 1) AS total_rows
FROM `order` t
WHERE status = 1
ORDER BY create_time DESC
LIMIT 0, 10;
原理:标量子查询,每一行结果都附带同一个总行数字段 total_rows。
✅ 优点:只一条 SQL,写法简单,兼容所有 MySQL 版本,结果一致性强;
❌ 缺点:子查询 count 存在重复执行风险;返回的每一行都携带 total,存在少量带宽冗余;适合小数据量、筛选条件简单的场景。
SELECT t.*, c.total_rows
FROM `order` t
CROSS JOIN (SELECT COUNT(*) AS total_rows FROM `order` WHERE status = 1) c
WHERE t.status = 1
ORDER BY create_time DESC
LIMIT 0, 10;
原理:先单独用子查询算出总数,生成只有一行的统计表,交叉连接到分页结果,所有分页行共用同一个 total 值。
✅ 优点:count 只会执行一次,稳定,兼容性好,8.0、5.7 都支持;业务代码只接收一次结果集,解析取出第一条的 total 即可;
❌ 缺点:count 本身在无索引大表上查询较慢,属于 count 固有瓶颈。
SELECT *
FROM (
SELECT
id, name, create_time,
COUNT(*) OVER() AS total_rows,
ROW_NUMBER() OVER (ORDER BY create_time DESC) AS rn
FROM `order`
WHERE status = 1
) AS temp
WHERE rn BETWEEN 1 AND 10;
原理:COUNT(*) OVER() 窗口函数,在不分组的情况下统计整个结果集行数,附加到每一行;ROW_NUMBER() 实现分页行号。
✅ 优点:语义清晰,适合复杂排序、多维度分页场景;可以和其他窗口指标一起计算;
❌ 缺点:MySQL 5.7 及以下不支持窗口函数;窗口计算会先扫描全部符合条件的数据再过滤行号,大表性能风险高,不适合千万级大表分页。
CROSS JOIN + count 子查询,稳定可控;补充:大表 count 优化的重点——给 where 条件字段建立联合索引,避免全表扫描;如果允许近似总数,可以用
”information_schema快速估算行数,牺牲精度换速度。
count(*),MySQL 优化器对 count(*) 优化最好;count(字段) 会自动忽略 NULL 值,统计口径会变小;id > last_id)替代 offset 分页;SQL_CALC_FOUND_ROWS,官方废弃特性存在迁移风险;以 CROSS JOIN 方案为例,取出分页列表与总条数:
import pymysql
sql = """
SELECT t.*, c.total_rows
FROM `order` t
CROSS JOIN (SELECT COUNT(*) AS total_rows FROM `order` WHERE status = 1) c
WHERE t.status = 1
ORDER BY create_time DESC
LIMIT %s, %s
"""
# page=1, size=10
offset = (1 - 1) * 10
size = 10
cursor.execute(sql, [offset, size])
res = cursor.fetchall()
if not res:
data_list = []
total = 0
else:
total = res[0]["total_rows"]
# 删除多余的 total 字段,只保留业务字段返回前端
for row in res:
del row["total_rows"]
data_list = res
result = {
"list": data_list,
"total": total,
"page": 1,
"size": 10
}
同时拿到分页数据和总行数,不存在万能写法,需要根据 MySQL 版本、数据量级选型:
SQL_CALC_FOUND_ROWS。分页的性能瓶颈往往不在"一条还是两条 SQL",而在于where 筛选条件缺少索引、超大 offset 偏移。优化时应优先从索引和分页方式入手。
(注:部分内容由豆包 AI 生成)
”
一、业务背景 在后台列表、管理系统、报表页面的分页需求里,前端通常需要两份数据:当前页的分页记录、符合筛选条件的数据总条 ...
2026-11-09一、需求看起来简单,实际坑不少 "把文本里所有中括号 [] 中间的内容提取出来"——这是文本清洗里最常见的需求之一。日志里的 [I ...
2026-11-09大数据分析师证书考什么 考试范围 PART 1 大数据基础理论 占比(8% ) a. 大数据分析基础(1%) b. Python 基础(5%) c. Li ...
2026-11-09CDA数据分析师 出品 作者:李诗怡 一、数据处理概述 定义: 在正式开展数据分析之前,对原始采集的数据进行整理、修正、加工和精 ...
2026-11-06一、为什么数据要先标准化 拿到一份数据,各列的量纲往往完全不同:年龄单位是"岁"(约 20~60),收入单位是"元"(几千到几万) ...
2026-11-06一、为什么 Python 成了统计分析的主流工具 十年前做统计分析,主流选择是 SPSS、SAS、Stata。现在越来越多的研究者、分析师转向 ...
2026-11-06核心资源推荐 CDA教材(2025):https://edu.cda.cn/goods/show/3151CDA模拟题(2025):https://edu.cda.cn/goods/show/2845CD ...
2026-11-06核心资源推荐 CDA教材(2025):https://edu.cda.cn/goods/show/3151CDA模拟题(2025):https://edu.cda.cn/goods/show/2845CD ...
2026-11-06“大学生必备证书有哪些”最容易被答成一张越长越好的清单。但校招筛选的真实逻辑是:证书要对应你投的岗位任务,并且在校期间确 ...
2026-11-05大学期间能报的证书,先别急着看“含金量榜单”。更实用的第一步是问:我现在这个身份、这个学历,符合报考条件吗? 很多证书宣 ...
2026-11-05大学期间能考的证书很多,但真正需要先回答的是两个问题:当前有没有报考资格,以及这张证书对应什么岗位任务。 前者决定你能不 ...
2026-11-05先把结论说清楚:真正“只有在校大学生能考、毕业就彻底没资格”的证书数量不多,主要集中在语言类考试的部分专项、面向高校学生 ...
2026-11-05上班族问“考什么证书有用”,真正要解决的不是找一张“最值钱”的证,而是判断哪张证能嵌进你现有的岗位任务。同样一张证书,做 ...
2026-11-05职称证书不是统一的考试项目。同样“考职称”,经济、会计、统计、审计、软考走全国统一考试,工程、教师、卫生等系列多数走评审 ...
2026-11-0533岁选证书,最怕两件事:一是被“适合女生”的清单带着走,考完发现岗位用不上;二是投入大半年,报名时才发现学历、专业或工作 ...
2026-11-05“女生容易考的证书”这个问题,真正难的不是找一份名单,而是判断“容易”到底指什么。报名条件宽松、考试通过率高、拿证后能找 ...
2026-11-05“女生适合考什么证书”这类搜索,背后往往是同一个困惑:网上榜单太多,口径却说不清楚。有人把培训证书和职业资格混在一起排, ...
2026-11-05先把结论说清楚:没有一张证书对所有人都“又好考又实用”。同一个证,对在校生可能报名门槛都过不了,对有三年工作经验的人却只 ...
2026-11-05“考证书有哪些”这个问题,如果只想要一份名单,网上能搜到成百上千个。但真正有用的答案不是“有哪些”,而是“它们分别是什么 ...
2026-11-05“考什么证好一点”这句话,十个人问可能有十个意思。有人想问哪个证容易过,有人想知道哪个证找工作管用,还有人关心哪个证长期 ...
2026-11-05