count(*) 怎么工作的
2022-11-14 本文已影响0人
wayyyy
在不同的 MySQL 引擎中,count(*) 有不同的实现方式:
- MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;
- InnoDB 引擎执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。
所以当使用了 InnoDB 引擎,记录数越来越多的时候,计算一个表的总行数也会越来越慢。
那为什么 InnoDB 不跟 MyISAM 一样,也把数字存起来呢?
为即使是在同一个时刻的多个查询,由于多版本并发控制(MVCC)的原因,InnoDB 表"应该返回多少行"也是不确定的。