SELECT COUNT(*)
通过最小索引树遍历后不需要返回行数据直接+1
SELECT COUNT(1)
count(1)是需要返回数据的但是不做为空判断+1
SELECT COUNT(字段)
count(字段)是需要返回数据的但是不做为空判断+1,相比SELECT COUNT(1)占用的内存更多
按照效率排序的话:
count(字段)<count(主键id)<count(1)≈count()
所以我建议你,尽量使用count()。
由上面比较可以看出,由于Mysql优化器的原因,SELECT COUNT(*)*不是全表扫描的,直接走最短索引树
也由于优化器的原因,Mysql会自动选择选择(这也就造成与我们想的不一样的情况——SQL语句不走索引)
参考:
https://mp.weixin.qq.com/s/SNRvdmyS57oWS_CyYKVvSA
林晓斌的Mysql 45讲中的 —— 14 | count(*)这么慢,我该怎么办?