在一个有500万行的表中,SELECT count(*) FROM table在MyISAM中是即时的,但在InnoDB中需要几秒钟。
为什么会这样呢?为什么他们没有像MyISAM那样优化InnoDB中的计数?
谢谢。
发布于 2010-10-13 06:10:04
这是实现上的不同。InnoDB支持事务,因此它必须根据表的事务一致性视图对行进行计数。因为MyISAM不支持ACID属性,所以如果插入一行,它将为每个人插入,因此它只需更新保存在存储引擎中的计数。
发布于 2010-10-13 06:13:09
MyIsam有存储在某个地方的行数,因此查询几乎是即时的,InnoDB必须扫描表格才能获得完整的计数。如果您有一个条件计数(例如:"SELECT COUNT(*) WHERE CUSTOMER =4“),那么两者都必须执行扫描,在这种情况下没有太大区别
来源:
http://www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/
https://stackoverflow.com/questions/3919427
复制相似问题