MySQL中,count()函数的基本概念
count(字段)用来计算指定列不为NULL的数据的数量,但count(*)和
) 和count(1)会统计表中所有的行数,即使某些行是NULL也会被统计在内。
总之,count( *) 和count(1) 都是统计行数,而count(字段) 是统计字段列非null的行数
执行效率
1、如果在开发中需要用到count()聚合,那么优先考虑count(*),因为mysql本身对于count(*)做了特别的优化处理。
2、有主键或联合主键的情况下,count(*)略比count(1)快一些。
没有主键的情况下count(1)比count(*)快一些。
如果表只有一个字段,则count(*)是最快的。
3、基于MySQL的Innodb存储引擎,统计表的总记录数按照效率排序的话count(字段)<count(主键id)<count(1)≈count(*),效率最高是count(*),并不是count(1)
4、如果有面试官问你mysql中count(*)和count(1)哪个效率高?你就可以明确地告诉他,Innodb存储引擎下效率最高是count(*)。
推荐使用count(*) 因为其书写方法符合ISO标准。