count(1)、count(*) 与 count(列名) 的区别?

count(1)、count(*) 与 count(列名) 的区别?
执行效果:
- 使用 count(*) 将包括所有的列,相当于统计行数。在统计结果时,不会忽略列值为 NULL 的情况。
- 使用 count(1) 将忽略所有列,使用数字 1 代表每一行。在统计结果时,不会忽略列值为 NULL 的情况。
- 使用 count(列名) 只会统计指定的列。在统计结果时,会忽略列值为空(NULL)的计数。如果某个字段的值为 NULL,则不会计入统计结果。
执行速度:
- 如果列名是主键,count(列名) 的执行速度比 count(1) 快。
- 如果列名不是主键,count(1) 的执行速度比 count(列名) 快。
- 如果表有多个列且没有主键,count(1) 的执行效率优于 count(*)。
- 如果表有主键,使用 select count(主键) 的执行效率最优。
- 如果表只有一个字段,则 select count(*) 的执行效率最优。