SELECT COUNT(employees.salary) FROM employees; # 统计一列的个数 会忽略null值
SELECT COUNT(*) FROM employees; # 统计行数 不会忽略null
SELECT COUNT(1) FROM employees; # 统计行数 不会忽略null
COUNT原理:
每遍历一行,额外加个字段,里面存储1,遍历完成,返回1的个数
字段1 | 字段2 | 统计字段 |
值 | 值 | 1 |
值 | 值 | 1 |
值 | 值 | 1 |
... | ... | ... |
所以,COUNT(1)相当于COUNT(*)
若为COUNT(2) 则统计字段是 2 统计的是2 的个数,若为其他则同理。一般是1
效率:
MYISAM存储引擎下,COUNT(*)的效率高
INNODB存储引擎下,COUNT(*)和COUNT(1)的效率差不多,比COUNT(字段)效率高一些