2013-05-14 76 views
1

阅读问题之前关闭作为重复,因为有很多关于这个问题,但至少我没有找到我在找什么。mysql - MyISAM或InnoDB - 加入速度与查找速度

什么是明确的现在:

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

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

两个表,让说,T1为列idbla1bla2,... ,blan;并且t2具有列t1Id,extra1,extra2,...,extran

表1(t1)是InnoDB(需要交易清楚)。表2(t2)总是与t1一起使用(对于某些特定情况是额外的数据),因此总是会在t2出现的地方连接它们。这将指向InnoDB。事情是,在连接之后,一个搜索也将完成(总是)一个字符串在一列中。这将指向MyISAM。

获取某物的时间显然是连接时间和搜索时间之和。问题是,如果我优化一个,我会让另一个慢一些。

奖金事实:表格确实很大,t2从不需要事务,行锁或任何通常施加于InnoDB的东西。

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

回答

4

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

一般来说,我会建议你使用InnoDB:

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

我会做这样的:

检查这里的free MySQL查询分析器。

通过这种方式,您可以查看联接和搜索的成本。那么你应该根据结果选择格式!如果搜索“成本”更多,则选择mYisam,例如。

除此之外:here有一个很好的比较,它可以帮助您找到这可能取决于即使在插入等

希望它可以帮助的数量是最适合你。很难说:一个更好。在一般情况下,这实际上取决于您的查询,您的数据等。