count(1)、count(*)
从执行计划来看,两者效果是一致的。
当表的数据量大一些时(>1 万),count(1)的性能不如count(*)。
当表数据小于1万时,count(1)的性能以微弱优势胜出count(*)。
MySQL将count(*)会自动优化为count(1),走聚集索引,由此可见两者基本无差距。
count(1)、count(*)、count(列名)在计数上的区别
Nation(民族)表数据:
执行查询结果:
可见:count(列名)不计字段为Null的数据,count(1)、count(*)无论是否有值,都会计入总数。
执行效率
- 列名为主键,count(列名)会比count(1)快
- 列名不为主键,count(1)会比count(列名)快
- 如果表多个列并且没有主键,则 count(1 的执行效率优于 count(*)
- 如果有主键,则 select count(主键)的执行效率是最优的
- 如果表只有一个字段,则 select count(*)最优。
引用:
https://zhuanlan.zhihu.com/p/89299468