一、count(主键)

innodb引擎会遍历整张表,把每一行的主键值都取出来返回给服务层,服务层拿到主键后直接按行进行计数累加

二、count(特定字段)

2.1 没有not null约束

innodb引擎会遍历整张表,把每一行的字段值都取出来返回给服务层,服务层判断是否为null,不为null计数累加

2.2 有not null约束

innodb引擎会遍历整张表,把每一行的字段值都取出来返回给服务层,服务层直接按行进行计数累加

三、count(1)

innodb引擎会遍历整张表,但不取值,服务层对于返回的每一行,放一个数字1进去,直接按行计数累加

四、count(*)

innodb引擎会遍历整张表每一行,但并不会全部把字段值取出来,而是专门做了优化,不取值,服务层直接按行计数累加,

性能比上边几个高。

五、总结

上边几种count用法,主键不可能为Null,只有count(字段) 会忽略字段值为null的行,count(1)和count(*)都不会忽略null。