count(*) count(id) count count(字段)
Posted arebirth
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了count(*) count(id) count count(字段)相关的知识,希望对你有一定的参考价值。
最近在研究mysql的时候针对这几个的效率问题,就此查了一些文章,总结了一下。
count(id)
InnoDB引擎会遍历整张表,把每一行行的id值全部取出来,返回给server层,server层拿到id后,判断是不可能为空的,就按行累加。
count(1)
InnoDB引擎遍历整张表,但不取值,server层对于返回的每一行,放一个数字 1 进去,判断是不可能为空的,累计增加。
count(字段)
1.如果这个字段是定义为not null的话,一行行地从记录里面读出这个字段,判断不能为null,按行累加
2.如果这个字段定义允许为null的话,判断到有可能是null,还要把值取出来在判断一下,不是null才累加。
count(*)
不会把全部的字段取出来,而是做专门的优化,不取值,count(*)肯定不是null,按行累加。
总结:count(*)>count(1)>count(id)>count(字段)
以上是关于count(*) count(id) count count(字段)的主要内容,如果未能解决你的问题,请参考以下文章
MySQL中count是怎样执行的?———count,count(id),count(非索引列),count(二级索引列)的分析
MySQL中count是怎样执行的?———count,count(id),count(非索引列),count(二级索引列)的分析
MySQLMySQL count(*) count 实现方式以及各种 count 对比