【MySQL】count(1)、count(*)、count(字段)、count(主键)的区别

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【MySQL】count(1)、count(*)、count(字段)、count(主键)的区别

三者的计数方式

count(1):

count(1)会统计表中所有的记录数,包括字段为null的记录。

count(*):

count(*)包括了所有列,相当于行数,在统计结果的时候,不会忽略列值为null的,即使某一行的所有列全为null也不会忽略当前行,即最终返回行数。

count(字段):

count(字段)会统计该字段在表中出现的次数,忽略字段为null的情况。即如果该字段为null,那么不进行统计。

三者的执行效果

count(1):

count(1)忽略了所有列,每一列都被使用1来代表,在统计结果的时候,不会忽略列值为null的行,即使某一行所有列都为null,也不会忽略当前行。

count(*):

count(1)包括了所有列,相当于行数,在统计结果的时候,不会忽略列值为null的行,即使某一行所有列都为null,也不会忽略当前行。

count(字段):

count(字段)只包括列名那一列,在统计结果的时候,会忽略列值为空的技术,即如果某一列的当前字段为null,那么不对当前行进行计数。

三者的执行效率

字段为主键时:

count(字段) > count(1)

原因:当某一字段为主键,MySQL自动为当前字段列添加主键索引。主键索引使用B+Tree实现,相比于将每一列都设置为1然后计数效率更高。

字段不为主键:

count(字段) < count(1)

原因:当字段不为主键时,没有主键索引,那么对字段进行count操作,可想而知,首先需要先判断当前字段是否为null,然后再进行计数,而count(1)显然没有这么繁琐。

表有多列且没有主键(基本不会出现):

count(1) ≈ count(*)

MySQL底层对count( * )进行了优化 ,使得其拥有较高的效率。

有主键:

当有主键的时候,select (主键)的执行效率最高。

表有且仅有一个字段:

如果表只有一个字段,那么select (*)的效率最高。

总结:

执行效率上, count(* )> count (1) > count(主键id) >count(字段)

因此尽量使用 count(*)


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 关系型数据库 MySQL
ES的全文索引和MySQL的全文索引有什么区别?如何选择?
【8月更文挑战第26天】ES的全文索引和MySQL的全文索引有什么区别?如何选择?
155 5
|
21天前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
21天前
|
存储 关系型数据库 MySQL
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
覆盖索引、前缀索引、索引下推、SQL优化、EXISTS 和 IN 的区分、建议COUNT(*)或COUNT(1)、建议SELECT(字段)而不是SELECT(*)、LIMIT 1 对优化的影响、多使用COMMIT、主键设计、自增主键的缺点、淘宝订单号的主键设计、MySQL 8.0改造UUID为有序
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
|
18天前
|
SQL 关系型数据库 MySQL
MySQL数据库中给表添加字段并设置备注的脚本编写
通过上述步骤,你可以在MySQL数据库中给表成功添加新字段并为其设置备注。这样的操作对于保持数据库结构的清晰和最新非常重要,同时也帮助团队成员理解数据模型的变化和字段的具体含义。在实际操作中,记得调整脚本以适应具体的数据库和表名称,以及字段的详细规范。
26 8
|
22天前
|
SQL 关系型数据库 MySQL
MySQL根据某个字段包含某个字符串或者字段的长度情况更新另一个字段的值,如何写sql
MySQL根据某个字段包含某个字符串或者字段的长度情况更新另一个字段的值,如何写sql
51 0
|
2月前
|
SQL 关系型数据库 MySQL
Mysql中from多表跟join表的区别
Mysql中from多表跟join表的区别
87 0
|
2月前
|
关系型数据库 MySQL
Mysql中count(1)、count(*)以及count(列)的区别
Mysql中count(1)、count(*)以及count(列)的区别
31 0
|
2月前
|
关系型数据库 MySQL 数据库
MySQL MVCC和间隙锁有什么区别?
【8月更文挑战第24天】MySQL MVCC和间隙锁有什么区别?
44 0
|
2月前
|
SQL 关系型数据库 MySQL
mysql不等于<>取特定值反向条件的时候字段有null值或空值读取不到数据
对于数据库开发的专业人士来说,理解NULL的特性并知道如何正确地在查询中处理它们是非常重要的。以上所介绍的技巧和实例可以帮助你更精准地执行数据库查询,并确保数据的完整性和准确性。在编写代码和设计数据库结构时,牢记这些细节将有助于你避免许多常见的错误,提高数据库应用的质量与性能。
50 0
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
下一篇
无影云桌面