用下面这条语句作为例子:
    select count(1) from t_order;

    如果表里只有主键索引,没有二级索引时。
    count(1) 执行过程是怎样的? - 图1
    那么,InnoDB 循环遍历聚簇索引(主键索引),将读取到的记录返回给 server 层,但是不会读取记录中的任何字段的值,因为 count 函数的参数是 1,不是字段,所以不需要读取记录中的字段值。参数 1 很明显并不是 NULL,因此 server 层每从 InnoDB 读取到一条记录,就将 count 变量加 1。
    可以看到,count(1) 相比 count(主键字段) 少一个步骤,就是不需要读取记录中的字段值,所以通常会说 count(1) 执行效率会比 count(主键字段) 高一点。
    但是,如果表里有二级索引时,InnoDB 循环遍历的对象就二级索引了。
    count(1) 执行过程是怎样的? - 图2