count(列名) ,count(1)与count(*) 有何区别?

简介: count(列名) ,count(1)与count(*) 有何区别?

Mysql版本:8.0.26

可视化客户端:sql yog

一、Mysql之count函数简介

👉表达式

COUNT(expression)

👉描述

返回查询的记录总数,expression 参数是一个字段或者 * 号

👉举例说明

①准备表数据

②查询统计user表中的username字段的总记录数

代码示例如下:

SELECT COUNT(username) FROM USER;

💡ps:

MySQL在Windows下不区分大小写,但在Linux下默认是区分大小写。 因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。


二、count(列名) ,count(常量)与count(*) 有何区别?

2.1 统计字段上的区别

👉区别

  • count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略为NULL的值
  • count(常量)包括了所有的列,比如用1代表代码行,在统计结果的时候,不会忽略为NULL的值。
  • count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

👉不信?请看如下案例演示

①准备表数据

②sql代码测试(以字段id与name举例)

  1. 使用count(*) 与 count(常量) 查询统计

查询user表中所有的记录行数

  1. 代码示例如下:
    a. 使用count(*)查询统计
SELECT COUNT(*) FROM USER;

  1. b. 使用count(常量)查询统计,以1为例
SELECT COUNT(1) FROM USER;
  1. 使用count函数统计列name与id
    代码示例如下:
    a. 使用count(name) 查询统计列name的总记录数【2条】
SELECT COUNT(NAME) FROM USER;

  1. b. 使用count(id) 查询统计列id的总记录数【4条】
SELECT COUNT(id) FROM USER;

why?

💡原因

从下图中表user中的数据来看,列name下有效【非NULL】的字段值共有两行,无效【为NULL】的字段值共有两条,而列id下有效【非NULL】的字段值共有四行,没有无效【为NULL】的字段值

2.2 执行效率上的区别

👉区别

  • 列名为主键,count(列名)会比count(1)快
  • 列名不为主键,count(1)会比count(列名)快
  • 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
  • 如果有主键,则 select count(主键)的执行效率是最优的
  • 如果表只有一个字段,则 select count(*)最优
相关文章
|
Java Spring 容器
springboot的启动流程
springboot的启动流程
|
安全 网络协议 Shell
【内网安全】 域防火墙&入站出站规则&不出网隧道上线&组策略对象同步
【内网安全】 域防火墙&入站出站规则&不出网隧道上线&组策略对象同步
364 0
|
3月前
|
关系型数据库 MySQL 数据库
为什么 MySQL 不推荐用 Docker 部署?
本文探讨了MySQL是否适合容器化的问题,分析了Docker容器在数据安全、性能瓶颈、状态管理及资源隔离等方面的挑战,并指出目前主流分布式数据库如TDSQL和OceanBase仍倾向于部署在物理机或KVM上。
239 0
|
10月前
|
存储 搜索推荐 API
拼多多根据ID取商品详情原数据API接口的开发、运用与收益
拼多多作为中国电商市场的重要参与者,通过开放平台提供了丰富的API接口,其中根据ID取商品详情原数据的API接口尤为重要。该接口允许开发者通过编程方式获取商品的详细信息,为电商数据分析、竞品分析、价格监测、商品推荐等多个领域带来了丰富的应用场景和显著的收益。
633 10
|
Linux API 开发者
​geth命令参数详解 1.10.4​
​geth命令参数详解 1.10.4​
260 0
|
机器学习/深度学习 人工智能 自然语言处理
人工智能在创意写作中的应用与挑战
【8月更文挑战第9天】随着人工智能技术的飞速发展,其在创意写作领域的应用逐渐增多。AI不仅可以协助作家生成文本、提供创作灵感,还能进行作品的风格分析和语言优化。然而,AI在创意写作中也面临着理解深度、版权归属、情感表达等多重挑战。本文将探讨AI技术在创意写作中的积极影响及其局限性,分析其对传统写作模式的冲击,并讨论未来的发展方向。
340 10
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
1036 3
【面试题精讲】JVM中哪些对象可以被称为GC ROOT对象
【面试题精讲】JVM中哪些对象可以被称为GC ROOT对象
|
SQL Oracle 关系型数据库
SQL添加字段记录详解:技巧与方法实践
在数据库管理中,经常需要向表中添加新的字段(列)或向现有字段中插入新的记录(行)
2772 0
|
监控 Linux Shell
Linux命令setsid深度解析
`setsid`是Linux命令,用于创建新会话并运行命令,使其独立于终端,不受用户注销影响。它创建新会话和进程组,进程成为领头进程。常用在后台任务,如数据处理和守护进程。示例:`setsid ping baidu.com`。注意需手动重定向I/O,结合`nohup`使用更佳。适用于长时间运行的服务和脚本管理。