countcount(*)count(列名)的区别
Posted 爱叨叨的程序狗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了countcount(*)count(列名)的区别相关的知识,希望对你有一定的参考价值。
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
以上是关于countcount(*)count(列名)的区别的主要内容,如果未能解决你的问题,请参考以下文章
执行countcount(*) 与 count(列名) 到底有什么区别?
执行countcount(*) 与 count(列名) 到底有什么区别?
select count(*)countcount的区别和执行效率比较