一、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。