2012-10-19 93 views
26

我正在为我的研究写一个网络应用程序,其中包括全文搜索和外键。为什么MySQL的MyISAM引擎不支持外键?

我已经读过某处,MyISAM引擎适用于全文搜索,而InnoDB适用于外键。

在这种情况下,我应该使用哪种引擎来获得最佳性能?

  • 为什么MyISAM不支持外键关系,但InnoDB呢?
  • 为什么MyISAM支持全文搜索,但InnoDB不支持?
+1

哪里是'somewhere'?我相信这是解释'somewhere' – ajreal

+5

功能默认情况下不存在。有人需要实施它们。 –

+0

@ajreal我已经读过我的大学书。这本书解释了引擎的优点和缺点。 – Firefox101

回答

38
  1. 请告诉我,在这种情况下,我必须使用提升性能的发动机是什么?

    每个存储引擎的性能将取决于您执行的查询。但是,请注意,同一数据库中的不同表可以使用不同的存储引擎。

  2. 为什么MyISAM引擎不支持外键关系和InnoDB呢?

    由于Foreign Key Differences下记载:

    在后一阶段,外键约束会为MyISAM表实现好。

    因此,外键约束在MyISAM中根本还没有实现。

编辑:由于该意见从文档删除,看来,它不再计划实施MyISAM引擎外键约束。

  • 为什么MyISAM引擎不支持全文搜索和InnoDB不?

    由于What Is New in MySQL 5.6下记载:

    您可以在InnoDB表创建FULLTEXT索引,并使用MATCH() ... AGAINST语法对它们进行查询。

    因此,从MySQL 5.6起,全文搜索已在InnoDB中实施。

  • +3

    我没有看到引用“在稍后的阶段,外键约束也将为MyISAM表执行。”在MySQL文档中。也许这个功能已经没有路线图了? – shabbychef

    +0

    @shabbychef:你说得对 - 看起来评论在[2013年9月10日](http://web.archive.org/web/20130910041553/http://dev.mysql.com/doc) /refman/5.6/en/ansi-diff-foreign-keys.html)和[2013年10月11日](http://web.archive.org/web/20131011141007/http://dev.mysql.com/doc /refman/5.6/en/ansi-diff-foreign-keys.html);在当前文档的其他地方我看不到任何参考文献,表明FK约束将来仍然适用于MyISAM,我也不能看到有关此更改的任何特定文档/讨论/记录。所以是的,我猜想它不再计划。 – eggyal

    0

    我记得mysql只有myisam和innodedb在开发的时候。 MyIsam没有外键,因为它是不支持数据库中关系的旧系统。它永远不会使用外键!要使用它,你有innodb。如果你不需要所有的东西,比如DB中的关系,那么使用MyISAM来获得更好的性能。