面试题:count(1)、count(*)、count(列名)有什么区别?
从执行结果来看:
count(1)和count(*)之间没有区别,因为他们会统计表中的所有的记录数,包含字段为null 的记录。
但是count(列名)就有区别了,因为count(列名)会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。
从执行效率来说:
他们之间根据不同情况会有些许区别,MySQL会对count(*)做优化。
- 如果列为主键,count(列名)效率优于count(1)
- 如果列不为主键,count(1)效率优于count(列名)
- 如果表中存在主键,count(主键列名)效率最优
- 如果表中只有一列,则count(*)效率最优
- 如果表有多列,且不存在主键,则count(1)效率优于count(*)