【问题标题】:Why does InnoDB do a full scan for COUNT(*)?为什么 InnoDB 对 COUNT(*) 进行全面扫描?
【发布时间】:2011-04-24 13:58:06
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 改为:SELECT COUNT(*) FROM [an index]

标签: mysql database performance innodb


【解决方案1】:

MyIsam 有存储在某处的行数,因此查询几乎是即时的,InnoDB 必须扫描表以获取完整计数。 如果您有条件计数(例如:“SELECT COUNT(*) WHERE CUSTOMER =4”)都必须进行扫描,在这种情况下没有太大区别

来源:

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

【讨论】:

    【解决方案2】:

    这是实现方式的不同。 InnoDB 支持事务,因此它必须根据您对表的事务一致视图来计算行数。由于 MyISAM 不支持 ACID 属性,如果插入一行,它会为所有人插入,因此它可以更新它在存储引擎中保存的计数。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2023-04-03
    • 2016-08-14
    • 2010-11-12
    • 2013-01-07
    • 2020-01-10
    相关资源
    最近更新 更多