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(*)最优
相关文章
网络基础之三
网络基础之三
351 0
|
存储 关系型数据库 MySQL
MVCC多版本并发控制
MVCC多版本并发控制 1、MVCC MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
820 0
|
Java Spring 容器
springboot的启动流程
springboot的启动流程
|
安全 网络协议 Shell
【内网安全】 域防火墙&入站出站规则&不出网隧道上线&组策略对象同步
【内网安全】 域防火墙&入站出站规则&不出网隧道上线&组策略对象同步
422 0
|
5月前
|
关系型数据库 MySQL 数据库
为什么 MySQL 不推荐用 Docker 部署?
本文探讨了MySQL是否适合容器化的问题,分析了Docker容器在数据安全、性能瓶颈、状态管理及资源隔离等方面的挑战,并指出目前主流分布式数据库如TDSQL和OceanBase仍倾向于部署在物理机或KVM上。
327 0
|
网络协议 算法 网络性能优化
第十一问:TCP的窗口机制是什么?
TCP的窗口机制是实现流量控制和拥塞控制的重要手段,主要包括滑动窗口、接收窗口(rwnd)和拥塞窗口(cwnd)。滑动窗口定义了发送方允许发送的数据范围,接收窗口控制接收方的缓冲区容量,拥塞窗口防止网络拥塞。这些窗口通过动态调整,确保数据传输的高效性和可靠性。
|
存储 搜索推荐 API
拼多多根据ID取商品详情原数据API接口的开发、运用与收益
拼多多作为中国电商市场的重要参与者,通过开放平台提供了丰富的API接口,其中根据ID取商品详情原数据的API接口尤为重要。该接口允许开发者通过编程方式获取商品的详细信息,为电商数据分析、竞品分析、价格监测、商品推荐等多个领域带来了丰富的应用场景和显著的收益。
812 10
|
Linux API 开发者
​geth命令参数详解 1.10.4​
​geth命令参数详解 1.10.4​
340 0
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
1192 3
【面试题精讲】JVM中哪些对象可以被称为GC ROOT对象
【面试题精讲】JVM中哪些对象可以被称为GC ROOT对象