结论
执行效率:count(*) =count(1) > count(id) > count(字段)
count(*)
做了优化,等同于count(0)
count(1)
读取所有字段
count(id)
读取id不为null的行数
count(字段)
读取(字段)不为null的行数
tips
1) 如果行数非常多,建立二级索引可以提高count(*) 和 count(1) 的查询,因为二级索引的数据少,相同的节点可以存放更多的数据。所以io次数就少
2)为什么要遍历而不是直接将行数存储到一个固定的地方?
因为innodb引擎有事物隔离,需要读取行树的时候判断这条数据对当前事物是否可见