MySQL count(*),count(1),count(field)区别


《阿里巴巴Java开发手册》中强制要求不让使用 COUNT(列名)或 COUNT(常量)来替代 COUNT(*)

  1. COUNT函数的用法,主要用于统计表行数。主要用法有:
  2. count(field),如COUNT(id),不包含id字段值为NULL的记录。会进行字段的非NULL判断,所以效率会低一些。
  3. count(*)包含NULL记录。
  4. 还可以使用COUNT(常量),如COUNT(1)来统计行数
  5. count(*)与count(1) InnoDB中性能没有任何区别,处理方式相同
  6. COUNT(*)是SQL92定义的标准统计行数的语法,所以MySQL对他进行了很多优化:
  7. MyISAM中会直接把表的总行数单独记录下来供COUNT(*)查询,
  8. InnoDB则会在扫表的时候选择最小的索引来降低成本。
  9. 当然,这些优化的前提都是没有进行wheregroup的条件查询。

总结:

COUNT(*)效率高,直接使用COUNT(*)查询表的行数!结果中包含NULL记录
count(field) 会对字段field进行is not null的判断,效率低,如果要查询的结果中不需要null的记录,可以使用count(field)