看到 这个字符的时候,是不是大家觉得是读取记录中的所有字段值?
对于 selete 这条语句来说是这个意思,但是在 count() 中并不是这个意思。
**count() 其实等于 count(0),也就是说,当你使用 count() 时,MySQL 会将 参数转化为参数 0 来处理。
所以,count() 执行过程跟 count(1) 执行过程基本一样的**,性能没有什么差异。
在 MySQL 5.7 的官方手册中有这么一句话:
_InnoDB handles SELECT COUNT() and SELECT COUNT(1) operations in the same way. There is no performance difference.
翻译:InnoDB以相同的方式处理SELECT COUNT()和SELECT COUNT(1)操作,没有性能差异。_
而且 MySQL 会对 count() 和 count(1) 有个优化,如果有多个二级索引的时候,优化器会使用key_len 最小的二级索引进行扫描。
只有当没有二级索引的时候,才会采用主键索引来进行统计。