哪个存储引擎执行 select count(*) 更快,为什么?
MylSAM更快
因为MylSAM内部维护了一个计数器,可以直接调取。
在MylSAM存储引擎中,把表的总行数存储在磁盘上,当执行「select count(*) from t」时直接返回总数据。
在InnoDB存储引擎中,当执行「count(*)」语句时,没有将总行数存储在磁盘上,会先把数据读取出来,一行一行的累加,最后返回总数量。全表扫描总数量,当数据量越来越大时,就会越来越耗时。
为什么InnoDB不把总行数存储在磁盘上,这跟InnoDB的事务特性有关,由于多版本并发控制(MVCC)的原因,InnoDB表「应该返回多少行」是不确定的。