一直听同事说MySQL的count(1) 比 count(*)要快,其实这两个的执行效率是一样的。
MyISAM引擎会把一个表的总行数记录下来,所以在执行count(*)的时候会直接返回数量,执行效率非常快。在MySQL 5.5后默认引擎切换为InnoDB,InnoDB因为增加了版本控制的原因,同时有多个事务访问数据并且有更新的时候,每个事务需要维护自己的可见性,那么每个事务查询到的行数也可能不相同,所以不能缓存具体的行数,每次都需要count一下所有的行数。
InnoDB handles SELECT COUNT() and SELECT COUNT(1) operations in the same way. There is no performance difference.*
MySQL官网给出的解释是这两者没有区别的
https://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html#function_count