你首先要明确的是,在不同的MySQL引擎中,count(*)有不同的实现方式。

    • MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数, 效率很高;
    • 而InnoDB引擎就麻烦了,它执行count(*)的时候,需要把数据一行一行地从引擎里面读出 来,然后累积计数。

    这里需要注意的是,我们在这篇文章里讨论的是没有过滤条件的count(*),如果加了where 条件 的话,MyISAM表也是不能返回得这么快的。

    那为什么InnoDB不跟MyISAM一样,也把数字存起来呢?