mysql - count(*)、count(id)、count(field)、max()、min()

141 阅读1分钟

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)就完事了