首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么InnoDB要对COUNT(*)进行全面扫描?

为什么InnoDB要对COUNT(*)进行全面扫描?
EN

Stack Overflow用户
提问于 2010-10-13 06:04:23
回答 2查看 1.1K关注 0票数 2

在一个有500万行的表中,SELECT count(*) FROM table在MyISAM中是即时的,但在InnoDB中需要几秒钟。

为什么会这样呢?为什么他们没有像MyISAM那样优化InnoDB中的计数?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-13 06:10:04

这是实现上的不同。InnoDB支持事务,因此它必须根据表的事务一致性视图对行进行计数。因为MyISAM不支持ACID属性,所以如果插入一行,它将为每个人插入,因此它只需更新保存在存储引擎中的计数。

票数 7
EN

Stack Overflow用户

发布于 2010-10-13 06:13:09

MyIsam有存储在某个地方的行数,因此查询几乎是即时的,InnoDB必须扫描表格才能获得完整的计数。如果您有一个条件计数(例如:"SELECT COUNT(*) WHERE CUSTOMER =4“),那么两者都必须执行扫描,在这种情况下没有太大区别

来源:

http://www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3919427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档