当然,对于交易数据库来说,InnoDB是一个扣篮。 MyISAM不支持事务或行级锁定。
但是,如果我想做一些涉及数亿行的大讨厌批量查询呢?
MyISAM在哪些方面比InnoDB具有相对优势?
例如,我知道的一个(次要)......“从my_table中选择计数(*);” MyISAM立即知道答案,而InnoDB可能需要一分钟或更长时间来决定。
---戴夫
答案 0 :(得分:5)
MyISAM可以使用非常大的数据集进行更好的扩展。 InnoDB在许多情况下都优于MyISAM,直到它无法将索引保留在内存中,然后性能急剧下降。
MyISAM还支持MERGE表,这是一种“穷人”分片。您可以即时添加/删除非常大的数据集。例如,如果每个业务季度有1个表,则可以创建过去4个季度或特定年份或任何所需范围的合并表。您可以重新声明基础MERGE表内容,而不是导出,删除和导入以转移数据。不需要更改代码,因为表的名称不会更改。
当您只添加到表格时,MyISAM也更适合日志记录。与MERGE表一样,您可以轻松地换出(旋转“日志”)表格和/或复制它。
您可以将与MyISAM表关联的数据库文件复制到另一台计算机,并将它们放在MySQL数据目录中,MySQL会自动将它们添加到可用的表中。你无法用InnoDB做到这一点,你需要导出/导入。
这些都是特定情况,但我已多次利用每一种情况。
当然,通过复制,您可以使用两者。表可以是主服务器上的InnoDB和服务器上的MyISAM。结构必须相同,而不是表类型。然后你可以充分利用两者。 BLACKHOLE表类型以这种方式工作。
答案 1 :(得分:1)
这是一篇很好的文章,比较了各种性能点http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ - 你必须从很多角度对它进行评估,包括你打算如何编写查询以及你的模式是什么样的。这不是一个黑白问题。
答案 2 :(得分:0)
根据this文章,从v5.6开始,InnoDB已发展到在所有情况下都更好的程度。作者可能有点偏颇,但它清楚地概述了哪种技术被视为平台的未来发展方向。