sql专题 之 count()区别
文章目录
- count(1)
- count(*)
- count(列名)
- 比较
count(1)
count(1) 是对结果集中的每一行计数,不关注具体的列,只是计数行数。
每一行都计为常数1
等同于 count(*),性能上基本一致,但有时可能用于表达清晰性
count(*)
与count(1)类似。
计算表中所有符合条件的行数,无论行内列值是否为空
通常推荐count(*)作为行计数的通用写法
因为在innoDB引擎中,会优化为直接统计页数上的数量
count(列名)
是对特定列进行非空值的计数。只有当该列有实际值才会被计入。
常用于统计特定字段的有效数据量时,例如有多少学生的son不为空→count(sno)
比较
- 当列中有大量的null值时,count(列名)需要遍历和检查每一行而count(*)不需要
- 故从性能上来说,count(*)的性能要优于count(列)