结论:
如果表没有主键,count(1)比count(*)快
表有主键,count(*)会自动优化到主键列上。
如果表只有一个字段,count(*)最快。
1、不建议写count(列名),会忽略字段为null的记录
2、count(0)、count(1)可以想象成在表中有一个字段,这个字段的值全是0或1;
count(值),如果这个值不是null计1,如果这个值是null计0
3、count(*)执行时会把*翻译成字段的具体名字,效果同count(0)、count(1)一样,只不过多了个翻译的过程,效率相对会低一点
4、如果列为主键,count(列名)效率优于count(1),如果列不为主键,count(1)效率优于count(列名),因此表中存在主键,count(主键列名)效率最优
5、count(1)跟count(主键)一样,只扫描主键。count(*)跟count(非主键)一样,扫描整个表。明显前者更快一些。
6、count(1)和count(*)基本没有差别,但在优化的时候尽量使用count(1)。