count(*)、count(1)、count（字段） 
一、三者的作用
一开始受SQL语句的影响，我以为count(1)执行的效率会比count(*)高，原因是count(*)会存在全表扫描，而count(1)可以针对一个字段进行查询。其实不是这样，count(1)和count(*)都会对全表进行扫描，统计所有记录的条数，包括那些为null的记录，因此，它们的效率可以说是相差无几。而count(字段)则与前两者不同，它会一行行统计该字段不为null的记录条数。
即：count(*) 和count(1) 都是统计所有行数，而count(字段) 是统计该字段列非null的行数
二、执行效率对比
1、如果在开发中确实需要用到count()聚合，那么优先考虑count(*)，因为mysql本身已经对于count(*)做了优化处理。
2、在有主键（或复合主键）的情况下，主键作为计算条件，count(主键)快一些。
3、 如果表只有一个字段，则count(*)执行效率是最快的。
4、count(字段)，字段是非主键字段，这样的使用方式最好不要出现，因为它不会走索引。
5、使用count()聚合函数后，若有where条件，且where条件的字段未建立索引，则查询不会走索引，直接扫描了全表，不好。比如：SQL语句不要跟where score= 1；这样的条件，会导致不走索引，降低查询效率。除非该score字段已经建立了索引。
扩展：count(主键ID)比count(1)慢
count(主键 ID) 计数中要去除null，而count(1)计的数是所有的行数。如果使用InnoDB存储引擎的话：
count(主键 ID)会遍历主键索引树，先把每一行的ID值取出来，判断是否为空，不空的行才会+1，最后返回累计值。必然耗时！
对于count(1)，InnoDB引擎会扫描主键索引树，因为不需要判断空值，直接按行累计+1，最后返回累计值。