mysql - MyISAM或InnoDB - 加入速度与查找速度

时间:2013-05-14 12:02:31

标签: mysql sql innodb myisam

在关闭之前阅读问题,因为有很多问题,但至少我找不到我想要的东西。

现在很清楚:

 MyIsam is faster at searching strings (much faster)
 InnoDB is faster at joins (much faster)

所以我的问题是:我有以下设置:

两个表,假设t1包含id列,bla1bla2,...,blan;和t2列t1Idextra1extra2,...,extran

表1(t1)是InnoDB(需要对其进行交易以便明确)。表2(t2)总是与t1一起使用(对于某些特定情况是额外数据),因此在t2出现的地方之间始终存在连接。这将指向InnoDB。问题是,在连接之后,搜索也将(总是)完成其中一列内的字符串。这将指向MyISAM。

获得某些东西的时间显然是加入时间和搜索时间之间的总和。问题是,如果我优化一个,我会让另一个变慢。

奖金事实:表格真的很大,t2从不需要交易,行锁定或任何通常强加InnoDB的东西。

什么是更好的选择? MyISAM或InnoDB?

2 个答案:

答案 0 :(得分:4)

唯一可以肯定的方法是创建两个表,使用示例数据加载它们并测量查询。

一般情况下,我建议您使用InnoDB:

  1. 由于MySQL 5.6全文搜索也可以在InnoBD(http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html)中使用,所以我认为你将失去你的MyISAM快速字符串搜索作为主要的betefit
  2. 使用MyISAM,您不仅会丢失行锁定支持,还会丢失外键以及数据完整性+不要忘记MyISAM“崩溃”

答案 1 :(得分:1)

我会这样做:

点击此处查看free mysql查询分析器。

通过这种方式,您可以看到加入和搜索的成本。然后你应该根据结果选择格式!如果搜索“花费”更多,那么选择mYisam,例如。

除此之外:here有一个很好的比较,可以帮助你找到最适合你的东西,甚至取决于插入的数量等。

希望它有所帮助。很难说:一个更好。在一般情况下,这实际上取决于您的查询,您的数据等。