很多人认为count(1)执行的效率会比count()高,原因是count()会存在全表扫描,而count(1)可以针对一个字段进行查询。其实不然,count(1)和count(*)都会对全表进行扫描,统计所有记录的条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。而count(字段)则与前两者不同,它会统计该字段不为null的记录条数。
下面它们之间的一些对比:
1)在表没有主键时,count(1)比count(*)快;
2)有主键时,主键作为计算条件,count(主键)效率最高;
3)若表格只有一个字段,则count(*)效率较高。
count(1)和count(*) --- 都为统计所有记录数,包括null
执行效率上:当数据量1W+时count(*)用时较少,1w以内count(1)用时较少
count(字段) --- 统计字段列的行数,不包括null
若字段为主键则count(主键)效率最高,否则少量数据时使用count(1)
总结:少量数据不忽略null选count(1),大量数据选count(*),忽略null选count(字段)