SQL中COUNT(*)的功能及工作原理是什么?
SQL中COUNT(*)的功能与工作原理
功能
COUNT(*) 的核心作用是统计查询结果集中的总行数,不管行内的字段是否包含 NULL 值。和 SELECT * 返回所有行的具体数据不同,它只会返回一个单一数值,代表符合查询条件的记录总数。
工作原理
- 逐行计数:数据库会遍历查询结果的每一行,每存在一行就将计数器加1,最终返回累计的数值。
- 不忽略NULL:哪怕某一行的所有字段都是
NULL,COUNT(*)依然会把这一行计入总数——这是它和COUNT(column)最关键的区别(COUNT(column)会忽略对应字段为NULL的行)。 - 优化机制:主流数据库的优化器会对
COUNT(*)做针对性优化:- 比如 MyISAM 引擎会维护一张表的总行数缓存,执行
COUNT(*)时直接返回缓存值,无需扫描全表; - InnoDB 则会优先利用主键索引或非空唯一索引的统计信息来快速计算行数,避免全表扫描(无
WHERE条件时)。
- 比如 MyISAM 引擎会维护一张表的总行数缓存,执行
- 条件过滤:如果查询带有
WHERE子句,COUNT(*)只会统计满足过滤条件的行数。
示例
-- 统计整张users表的总记录数 SELECT COUNT(*) FROM users; -- 统计users表中年龄大于18的用户数量 SELECT COUNT(*) FROM users WHERE age > 18;
和其他COUNT用法的区别
COUNT(1):在绝大多数数据库中,它和COUNT(*)的功能、性能完全一致,都是统计总行数,只是写法不同。COUNT(column_name):仅统计该字段不为NULL的行数,适合需要排除特定字段为空的场景。
内容的提问来源于stack exchange,提问作者shashank agrawal
相关产品推荐
相关产品推荐

