千家信息网

MySQL中COUNT如何使用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关MySQL中COUNT如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。COUNT(expr)返回检索行中expr不为
千家信息网最后更新 2026年11月01日MySQL中COUNT如何使用

这篇文章将为大家详细讲解有关MySQL中COUNT如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

  COUNT(expr)返回检索行中expr不为NULL的数量,其结果是一个BIGINT类型的值,如果没有符合行,那么返回0。该处需要注意的是所谓的NULL指的是expr表达式,并不是所需要检测的数据行的值,如果expr与数据列名相同,那么则返回该数据列不为NULL的数量。

MySQL的COUNT

  对于传统的存储引擎InnoDb而言,存储一个表的精确行数是十分困难的,因为多事务操作可能会并发,并且同时影响表的行数,所以为了避免并发线程查询同一个表而得到不同的行数,InnoDb没有对表的行数进行内部存储,所以在InnoDb中,SELECT(*)仅仅返回当前事务所读取到的行数。在MySQL5.7.18之前,InnoDb通过扫描聚簇索引来处理SELECTCOUNT(*)语句,5.7.18之后InnoDb使用最小且可用的第二索引来处理SELECTCOUNT(*)语句(除非查询优化器提示使用一个其他的索引)。如果没有第二索引,那么需要扫描聚簇索引。

  如果索引记录没有全部在缓冲池中,那么处理SELECTCOUNT(*)语句是需要耗费一些时间的。如果需要追求一个快速的计算,那么可以在应用中单独设计一个表用于在目标表进行插入或删除操作时记录其数据条数。然而,在大量的并行处理来update目标表的计数器表时会很难扩展。如果可以SHOWTABLESTATUS语句来获取该信息。

  InnoDb以相同的方式处理SELECTCOUNT(*)和SELECTCOUNT(1),并没有性能上的差距。

  对于MyIsam引擎,COUNT(*)在没有WHERE子句的情况下是非常快的,因为在MyIsam引擎中,表的精确行数会被保存下来。如果MyIsam表的第一列被设置为非空,那么COUNT(1)具有同样的优化效果(在对于100w条含有非空的简单数据进行COUNT(*)与COUNT(1)的对比测试没有明显发现性能差异)。

COUNT的规范

  COUNT(*)与COUNT(常量)都是查找表中记录的行数,可以包含NULL数据;COUNT(列名)是查找表中该列非空的函数。

  对于COUNT(*)相比COUNT(常量)而言,COUNT(*)是SQL92中定义的标准统计行数的语法,所以许多数据库对其进行优化,对于MySQL而言,COUNT(常量)也是转换为COUNT(*)执行的,标准语法优先使用COUNT(*),因为各个数据库查询优化器的优化策略肯定是从COUNT(*)开始的,阿里的SQL开发规范中也明确写明要使用COUNT(*)。

关于MySQL中COUNT如何使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

数据 处理 索引 语句 常量 引擎 存储 查询 相同 精确 事务 内容 性能 数据库 数量 文章 更多 标准 目标 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡网 新华互联网科技 朗新科技与工业互联网 宜安科技 互联网金融 南京欣网互联网科技 融贸通互联网科技 佰商互联网科技有限公司 汉立互联网科技有限公司联系电话 华中科技有哪些互联网大佬 卫星互联网科技股票 湖北码尼互联网科技有限公司电话 昭通互联网科技选哪家 玉溪互联网科技怎么选 互联网科技和信息 中国互联网公司排名锤子科技 领航科技大厦互联网公司 互联网科技包装股份有限公司上市 陕西彩京云互联网科技有限公司 河南商务圈互联网科技有限公司 科技互联网专业务虚会材料 互联网科技公司华为 兼蜜互联网科技 互联网科技创新的路径 互联网科技圈年度人物 合肥互联网科技公司公章图片 2021互联网科技公司排名 广州有谷有贝互联网科技有限公司 陕西九四连强互联网科技有限公司 科技和互联网行业的特点 北京瑞云互联网科技有限公司
0