count(主键字段),当没有二级索引的时候,InnoDB 循环遍历聚簇索引,将读取到的记录返回给 server 层,然后读取记录中的 id 值,就会 id 值判断是否为 NULL,如果不为 NULL,就将 count 变量加 1。
当有二级索引的时候,会走二级索引,因为二级索引树比聚簇索引树小,这样遍历二级索引树就会减少IO次数,优化器决定走二级索引。
count(0),count(1),和count(主键字段)别无二致,知识count(1)不用判空,所以效率略高。
count(字段)会进行全表扫描,效率最差。
优化count(*)取近似值
执行 explain 命令效率是很高的,因为它并不会真正的去查询,下图中的 rows 字段值就是 explain 命令对表 t_order 记录的估算值。
或者建一张表,专门存储各个表的行数