count(*) 怎么工作的

在不同的 MySQL 引擎中,count(*) 有不同的实现方式:

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

所以当使用了 InnoDB 引擎,记录数越来越多的时候,计算一个表的总行数也会越来越慢。

那为什么 InnoDB 不跟 MyISAM 一样,也把数字存起来呢?
为即使是在同一个时刻的多个查询,由于多版本并发控制(MVCC)的原因,InnoDB 表"应该返回多少行"也是不确定的。

你可能感兴趣的:(count(*) 怎么工作的)