【问题标题】:MyISAM vs InnoDB for BI / batch query performance (ie, _NOT_ OLTP)MyISAM 与 InnoDB 的 BI / 批量查询性能(即_NOT_OLTP)
【发布时间】:2011-08-20 23:20:03
【问题描述】:

当然,对于事务型数据库,InnoDB 是一个灌篮高手。 MyISAM 不支持事务或行级锁定。

但是,如果我想做涉及数亿行的大批量查询呢?

MyISAM 在哪些方面比 InnoDB 有相对优势??

例如,我知道的一个(次要)...“select count(*) from my_table;” MyISAM 立即知道答案,而 InnoDB 可能需要一分钟或更长时间才能做出决定。

--- 戴夫

【问题讨论】:

    标签: mysql performance innodb myisam


    【解决方案1】:

    根据this 文章,从 v5.6 开始,InnoDB 已经发展到在所有场景中都更好的地步。作者可能有点偏颇,但它清楚地勾勒出哪些技术被视为平台的未来方向。

    【讨论】:

      【解决方案2】:

      MyISAM 可以更好地处理非常大的数据集。 InnoDB 在许多情况下都优于 MyISAM,直到它无法将索引保留在内存中,然后性能急剧下降。

      MyISAM 还支持 MERGE 表,这是一种“穷人”的分片。您可以立即添加/删除非常大的数据集。例如,如果每个业务季度有 1 个表,则可以创建最近 4 个季度、特定年份或任何所需范围的合并表。您可以重新声明底层 MERGE 表内容,而不是导出、删除和导入以移动数据。由于表的名称没有更改,因此无需更改代码。

      MyISAM 也更适合记录,当您只添加到表中时。与 MERGE 表一样,您可以轻松换出(旋转“日志”)表和/或复制它。

      您可以将与 MyISAM 表关联的数据库文件复制到另一台计算机,然后将它们放在 MySQL 数据目录中,MySQL 会自动将它们添加到可用表中。 InnoDB 无法做到这一点,您需要导出/导入。

      这些都是具体案例,但我已经多次利用每个案例。

      当然,对于复制,您可以同时使用两者。一个表可以是主服务器上的 InnoDB 和从服务器上的 MyISAM。结构必须相同,而不是表类型。然后你就可以两全其美了。 BLACKHOLE 表类型就是这样工作的。

      【讨论】:

      • "InnoDB 在主服务器上,MyISAM 在从服务器上" --- 完全正确。这是我目前的设置。我的思想实验是 InnoDB 与 MyISAM 的从属服务器,它只为只读查询提供服务,这些查询往往是临时的并且涉及很多行。我现在使用 MyISAM,但我不确定它是否能帮我快速计算行数。
      • MERGE 表很有趣。那些与分区表。分区表似乎更严格地执行语义,支持跨所有分区的唯一键。 “穷人的碎片”的“宽松”语义可能更适合某些场景。我得考虑一下这些权衡。
      【解决方案3】:

      这是一篇很棒的文章,比较了不同的性能点 http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ - 您必须从多个角度进行评估,包括您打算如何编写查询以及您的架构是什么样的。这根本不是一个非黑即白的问题。

      【讨论】:

      • 那篇文章是关于 OLTP 的。每个图表都有“连接数”作为 x 轴。对于我的场景,“连接数”== 1。所有查询都是临时的。
      猜你喜欢
      • 2015-05-23
      • 2011-05-14
      • 1970-01-01
      • 2011-09-08
      • 2012-04-14
      • 2011-11-05
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多