区别如下:
count(*)
包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
的数据行;count(1)
忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
的数据行;count('列名')
只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是表示NULL
)的计数,即某个字段值为NULL
时,不统计。
分析:
- 最终统计结果
count(*)
和count(1)
是没有区别的,count('列名')
因为忽略了值为NULL
的数据,所以可能比前两者统计的数量少; - 三种统计方式最大的区别应该是:在不同的使用场景下,执行速度的差异。
- 如果表只有一个字段,那么
count(*)
速度最快; - 如果表没有主键,且有多个列,则
count(1)
比count(*)
快; - 如果表有主键(聚簇索引),则
count('主键')
最快,count(1)
和count(*)
则差不多,因为sql优化器会自动为count(*)
找到该字段;
- 如果表只有一个字段,那么
根据以上分析,在实际使用场景中选择合适的统计方式以获得最好的性能。