技术文摘
MySQL 中 count(*)、count(1) 与 count(col) 有何区别
MySQL 中 count(*)、count(1) 与 count(col) 有何区别
在 MySQL 数据库的使用过程中,我们经常会用到 count 函数来统计数据的行数。然而,count(*)、count(1) 与 count(col) 这三种不同的写法,在实际应用中存在着一些细微但重要的区别。
首先来看 count(*)。count(*) 是用来统计满足查询条件的总行数,这里的 “*” 代表所有列。它会把每一行都计算在内,包括包含 NULL 值的行。在大多数数据库引擎中,count(*) 被优化得非常高效,因为数据库在存储数据时,通常会维护一个行数的统计信息,所以 count(*) 可以直接获取这个统计值,执行速度相对较快。
接着是 count(1)。从功能上来说,count(1) 与 count(*) 基本相同,也是统计满足条件的行数。这里的 “1” 实际上是一个常量,MySQL 会将每一行都看作是一个 “1” 来进行计数。在性能方面,count(1) 和 count(*) 在大多数情况下表现相近,因为它们本质都是对行数进行统计。不过在某些特殊的数据库环境或查询场景下,可能会有微小的性能差异,但这种差异通常可以忽略不计。
最后说说 count(col)。count(col) 是统计指定列 col 中不为 NULL 的行数。如果指定列中存在 NULL 值,这些行将不会被统计在内。例如,有一个表中某列有部分数据为 NULL,使用 count(col) 时,这些 NULL 值行就不会被计入总数。这在需要精确统计某列有效数据行数时非常有用。但由于 count(col) 需要逐行检查指定列是否为 NULL,相比 count(*) 和 count(1),在性能上可能会稍差一些,尤其是在数据量较大时。
count(*) 和 count(1) 主要用于统计总行数,在性能上表现相近;而 count(col) 则侧重于统计指定列不为 NULL 的行数。在实际编程中,我们需要根据具体的业务需求和数据特点,合理选择使用这三种不同的 count 函数形式,以达到最佳的查询效果和性能优化。
TAGS: 数据库查询 MySQL性能 MySQL_count区别 count_函数
- 自主实现 Agent 统计 API 接口调用耗时
- 我的 Rust 学习之旅及方法
- 双重异步让 Excel 10 万行数据导入从 191 秒缩减至 2 秒,震撼!
- 你是否用过这六种.NET 爬虫组件?
- 你了解异步编程是什么吗?
- 架构模式、设计模式与代码模式的差异何在?
- Rust 中的迭代器:Map、Filter 与 Reduce
- Map 不止 put 和 get,这几个“新”方法等你来学
- 字节跳动 Golang 微服务框架 Hertz 与 Gorm 集成实战
- B站 S 赛直播关键事件的识别及应用
- JavaScript 中 12 种常用数组操作汇总整理
- JavaScript 注册中心背后的秘密
- 详解关键字 This 的坑与妙处
- 中文乱码问题的常见成因及解决办法
- Spring Boot 与 Nacos 打造实用的动态化线程池