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(列名) 到底有什么区别?

执行countcount(*) 与 count(列名) 到底有什么区别?

select count(*)countcount的区别和执行效率比较

SQL语句中countcount(*)count(字段)用法的区别

count(*)countcount(column)的区别