InnoDB或MyISAM - 为什么不两者兼而有之?

时间:2011-01-02 04:01:47

标签: mysql database database-design innodb myisam

我已经阅读了InnoDBMyISAM之间更好的各种主题。似乎辩论是使用或其他。是否不能同时使用两者,具体取决于表格?

这样做的缺点是什么?据我所知,可以在CREATE TABLE命令期间设置引擎。因此,经常读取的某些表可以设置为MyISAM,但需要事务支持的表可以使用InnoDB。

4 个答案:

答案 0 :(得分:14)

您可以将MyISAM和InnoDB表放在同一个数据库中。你会发现,当有非常大的表时,MyISAM会导致表锁问题。这最终的作用是,它将整个表锁定为单个事务,如果您有许多用户使用您的网站,这非常糟糕。例如,如果您的用户在您的网站上搜索某些内容并且查询需要几分钟才能完成,那么在此期间没有其他用户可以使用您的网站,因为整个表都已锁定。

另一方面,InnoDB使用行级锁定,这意味着该行是在事务期间从表中锁定的唯一行。 InnoDB在搜索时可能会变慢,因为它不提供像MyISAM这样的全文搜索,但是当你将它与MyISAM的表级锁定进行比较时,这不是一个大问题。如果您像许多大型网站一样使用InnoDB,那么您可以使用服务器端搜索引擎(如Sphinx)进行全文搜索。或者您甚至可以使用MyISAM表进行搜索,例如f00建议。我个人推荐InnoDB主要是因为行级锁定功能,还因为你可以通过许多其他方式实现全文搜索。

基本上,如果你的留言板应用程序有很多选择,插入和更新,InnoDB可能是最合适的选择。 但是如果你没有构建类似的东西(或者注册用户的任何其他东西)并且你主要使用静态内容(或者更多的读取而不是写入),那么你可以使用MyISAM。

答案 1 :(得分:3)

是的确你可以在同一个数据库中使用它们,你可以分别为每个表选择。

答案 2 :(得分:1)

简而言之,如果您正在处理需要可以处理大量INSERT和UPDATE指令的可靠数据库的东西,那么InnoDB是很好的。

并且,如果你需要一个主要采用大量读取(SELECT)指令而不是写入(INSERT和UPDATES)的数据库,考虑到它在表锁定方面的缺点,MyISAM很好。

你可能想看看;
Pros and Cons of InnoDB
Pros and Cons of MyISAM

答案 3 :(得分:0)

您不在数据库级别选择InnoDB或MyISAM,而是在表级别选择。因此,在一个数据库中,您可以使用一些运行InnoDB引擎的表和一些运行MyISAM的表。正如您所指出的,您可以选择在需要交易等的表格上使用InnoDB,在MyISAM中使用其他功能,例如全文搜索。

相关问题