在 SQL 中,COUNT
函数用于计算查询结果集中的行数。COUNT(1)
、COUNT(*)
和 COUNT(列名)
都可以用来统计行数,但它们在实现细节和使用场景上有一些区别。以下是详细的解释:
1. COUNT(1)
-
定义:
COUNT(1)
计算查询结果集中的行数。 -
实现: 在执行过程中,
COUNT(1)
会将1
作为一个非空的常量值,并对每一行进行计数。 -
效率: 现代的 SQL 优化器通常会将
COUNT(1)
和COUNT(*)
优化为相同的执行计划,因此性能基本相同。 -
用途: 适用于计算总行数,与
COUNT(*)
无区别。SELECT COUNT(1) FROM employees;
2. COUNT(*)
-
定义:
COUNT(*)
计算查询结果集中的总行数,包括所有列,不会忽略任何行,即使某些列包含NULL
。 -
实现: SQL 优化器会对
COUNT(*)
进行优化,将其转换为统计行数的操作。 -
效率: 通常是最常用和推荐的方式,因为其语义明确且优化器能够很好地处理。
-
用途: 适用于计算总行数,性能通常优于
COUNT(列名)
。SELECT COUNT(*) FROM employees;
3. COUNT(列名)
-
定义:
COUNT(列名)
计算查询结果集中某一列非NULL
值的行数。 -
实现: 只有当指定列的值不为
NULL
时,该行才会被计入结果。 -
效率: 由于需要检查每行中