count()不同写法的区别
COUNT(字段名):返回SELECT语句检索的行中值不为NULL的行数
COUNT(1):表示的是直接查询符合条件的数据库表的行数(会包含值为NULL的行数)。其中1指的是表中的第一个字段,如有表 table(id, column1),则1指 id。
COUNT(*):表示的是直接查询符合条件的数据库表的行数(会包含值为NULL的行数),其中*
指所有所有字段,并且是SQL92定义的标准统计行数的语法,因为是标准语法,所以MySQL数据库进行过很多优化,推荐使用。
COUNT(1)和COUNT(*)区别
MySQL官方文档这么说:
InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.
即InnoDB 对 count(1) 和 count(*) 的进行相同操作,两者性能相同。
由上述可知,可以把count(*) 和 count(1) 相同对待, 都是计算满足条件的行数(包括NULL),但count(*)是标准语法,所以推荐使用count(*)。