在一个包含5百万行的表中,SELECT count(*) FROM table
在MyISAM中是即时的,但在InnoDB中需要几秒钟。
为什么会这样?为什么他们不像MyISAM那样优化InnoDB中的计数?
感谢。
答案 0 :(得分:6)
这是实施方面的差异。 InnoDB支持事务,因此它必须根据事务一致的表视图来计算行数。由于MyISAM不支持ACID属性,如果插入了一行,则会为每个人插入一行,因此它只能更新它在存储引擎中保留的计数。
答案 1 :(得分:6)
MyIsam在某处存储了行数,因此查询几乎是即时的,InnoDB必须扫描表以获得完整计数。 如果您有条件计数(例如:“SELECT COUNT(*)WHERE CUSTOMER = 4”)两者都必须进行扫描,这种情况没有太大区别
来源:
http://www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/