count(*)
- 优点 \
- 最通用的计算行数的方法,它会计算满足条件的总行数,不考虑特定列的值。
- 无需考虑列值为 null 的情况。
- 如果没有条件的话,有可能用到元信息,而不用扫描行。
- 缺点 \
- 在处理大型表的时,需要扫描整个表,可能会性能下降,特别是没有合适索引的情况下。
count(id) id为主键
- 优点
- 性能与count()差不多,前提是表中没有 text、longText字段,此时可能性能优于count(),因为他不用考虑字段的null
- 缺点 暂无
count(field)
- 优点
- 可以针对特定的字段进行计数,而不是对所有列进行计数,在特殊场景下更有意义,一般情况就不要用了
- 缺点
- 如果字段为null,那么为null的行不会纳入到计数中
- 指定的字段 必须有索引,否则游行能问题。
max、min和count的区别
max、min 聚合函数跟count执行差不多,有索引会使用索引,区别是 count需要
遍历索引 计数而min、max 利用索引直接寻找最大、最小,但是 min和max用来统计来计数的话效率会高点,前提是 统计的字段要连续且后续不能删除
总结:
- 除非是特殊场景负责不要使用 count(field)
- 表中没有特殊类型字段的话,可以使用 count(*)
- 非特别情况下,直接使用count(id)就完事了