Mysql InnoDB或MyISAM——为什么不能两者兼而有之?

Mysql InnoDB或MyISAM——为什么不能两者兼而有之?,mysql,database,database-design,innodb,myisam,Mysql,Database,Database Design,Innodb,Myisam,我读过很多关于InnoDB和MyISAM之间哪个更好的帖子。看来,辩论是用还是用。根据表格的不同,是否不能同时使用两者 这样做的缺点是什么?据我所知,可以在CREATE TABLE命令期间设置引擎。因此,某些经常被读取的表可以设置为MyISAM,但需要事务支持的表可以使用InnoDB。是的,您可以在同一数据库中同时使用这两个表,您可以分别为每个表进行选择。您没有在数据库级别上选择InnoDB或MyISAM,而是在表级别上选择。因此,在一个数据库中,可以有一些表运行InnoDB引擎,一些表运行My

我读过很多关于
InnoDB
MyISAM
之间哪个更好的帖子。看来,辩论是用还是用。根据表格的不同,是否不能同时使用两者


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

是的,您可以在同一数据库中同时使用这两个表,您可以分别为每个表进行选择。

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

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

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

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

简言之,如果您正在处理需要可靠的数据库、可以处理大量插入和更新指令的东西,InnoDB是不错的选择

而且,考虑到MyISAM在表锁定方面的缺点,如果您需要一个主要执行大量读取(选择)指令而不是写入(插入和更新)指令的数据库,MyISAM是很好的

你可能想退房


如果您需要全文搜索,只需创建一个myisam表,并使用它将索引返回到经过良好聚集的innodb数据中即可-简单。谢谢,回答得很好。从我的应用程序来看,InnoDB似乎是最好的选择。什么是聚集主键索引?为什么聚集主键索引比普通的btree索引更好?