有时我被问到一些采访:InnoDB对MyISAM有什么好处,MyISAM比InnoDB好?问题的第一部分很清楚:InnoDB是交易兼容的,行级阻塞而不是表级阻塞,外键支持和其他一些,这些点只是浮现在脑海中。
但是当MyISAM真的比InnoDB好吗?
答案 0 :(得分:13)
当你不需要那些高级功能时,MyISAM优于InnoDB。存储速度比其他问题更重要。 MyISAM还允许在数据库引擎本身内执行全文搜索,而不是需要查询结果,然后将它们作为数组或应用程序中的任何内容进行搜索。
如果您需要以高度保真度存储具有复杂交互和关系的数据,那么InnoDB是一个合理的选择。如果您需要在很短的时间内保存或加载大量记录,MyISAM是一个合理的选择。我不建议将MyISAM用于重要的数据。它非常适合记录或评论字段或任何您不特别关心的记录,如果记录消失在扭曲的下层中。 InnoDB非常适合您关心数据,不需要快速搜索以及 使用MySQL。
值得一提的是,InnoDB支持行级锁定,而MyISAM仅支持表级锁定 - 也就是说,对于许多常见情况,由于更多查询并行执行,InnoDB可以大大加快。
底线:除非您必须使用MyISAM,否则请使用InnoDB。或者,针对PostgreSQL进行开发并充分利用它们。
答案 1 :(得分:4)
MyISAM不支持事务(以及提到的其他事项),因此它可以更快地工作。当您不需要这些功能时,MyISAM是一种在这些情况下获得更高性能的方法。
答案 2 :(得分:3)
如上所述,MyISAM支持全文,但也支持MERGE表类型。当你有一个大表并希望定期“交换”/存档它的部分时,这很方便。考虑要保留上一季度和/或年份的日志记录或报告数据。当您主要插入并且很少更新或删除时,MyISAM会更好地处理大量此类数据。
一旦您无法将索引放入内存中,InnoDB的性能会急剧下降。如果您的主键不是一个数字(即自动增量),那么您可能想要使用InnoDB重新思考。为InnoDB表上的每个索引复制主键。因此,如果你有一个大的主键和一些其他索引,你的InnoDB表会变得非常快。
答案 3 :(得分:2)
MySQL仅为MyISAM实现了一些功能(例如本机全文索引)。
也就是说,对于大多数制作应用来说,InnoDB通常更好。
答案 4 :(得分:1)
另外:mySQL中的全文搜索只在myISAM表中支持。
答案 5 :(得分:0)
MyISAM不支持交易或外键。
一般来说,如果您处理一般趋势(因此您不关心单个行的正确性),并且数据在夜间或从不更新,MyISAM 应更好。此外,它允许通过文件系统将各个表从一个服务器移动到另一个服务器。
InnoDB支持非常好的并发和事务。对全文提供了不错的支持,并对外键提供了相当不错的支持。