MySQL的count方法你真的用对了吗?
我们在日常工作中经常使用count方法来计算行数。
那么你知道count(*)、count(1)、count(列名)应该用哪个吗?
今天我们就来聊一聊这个问题吧!
01 执行效率
列名为主键时:count(列名)和count(1)和count(*)执行效率是一样的,因为explain中type类型都为index
列名不为主键时,而且列名没有创建索引,但是其他字段创建了索引:count(1)=count(*)>count(列名)。
因为expalin中的type类型count(1)和count(*)类型都为index,而count(列名)的type类型为all全表扫描。
列名不为主键,但是列名创建索引:count(1)=count(*)=count(列名),因为explain中type类型都为index。
如果表只有一个字段,则三者的执行效率一样。
02 主要区别
count(1)会统计表中的所有的记录数,包含字段为null的记录。
count(字段)会统计该字段在表中出现的次数,忽略字段为null的情况,即不统计字段为null的记录。
count(*)会统计表中的所有的记录数,包含字段为null的记录。
--THE END :下面是我的官方账号,欢迎关注--
评论