在 MySQL 中,`COUNT` 函数用于统计行数或非NULL值的数量,而括号中的参数可以是数字、*、或字段名。这些参数之间有一些区别:
1. COUNT(1):
这会统计选定的行的数量,而不考虑行中的任何具体数据。`COUNT(1)` 通常用于提高性能,因为它不需要检查行中的具体数据,只需对行数进行计数。
2. COUNT(*):
这也会统计选定的行的数量,但与 `COUNT(1)` 不同的是,它会统计包括NULL值的行。`COUNT(*)` 会计算所有行,包括具有NULL值的行。
3. COUNT(字段名):
这会统计指定字段中非NULL值的数量。它只计算在指定字段中包含有效数据的行数,而不考虑NULL值。这可以用于统计某个字段中的非NULL值的数量。
COUNT(1) 和 COUNT(*) 通常用于统计行数,其中 COUNT(*) 包括NULL值的行。
COUNT(字段名) 用于统计指定字段中的非NULL值的数量。
执行效率上:
列名为主键,count(列名)会比count(1)快
列名不为主键,count(1)会比count(列名)快
如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
如果有主键,则 select count(主键)的执行效率是最优的
如果表只有一个字段,则 select count(*)最优。