1

在关闭之前阅读问题作为重复请,因为有很多关于此的问题,但至少我没有找到我想要的东西。

现在很清楚的是:

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

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

两个表,假设 t1 有列id, bla1, bla2, ..., blan; 和 t2 具有列t1Id, extra1, extra2, ..., extran.

表 1 (t1) 是 InnoDB(需要对其进行事务处理,以便清楚)。表 2 (t2) 始终与 t1 一起使用(对于某些特定情况是额外的数据),因此在出现 t2 的地方总是会有连接。那将指向 InnoDB。问题是,在加入之后,还将(总是)在其中一列中搜索字符串。这将指向 MyISAM。

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

额外的事实:表真的很大,t2 从不需要事务、行锁或任何通常强加于 InnoDB 的东西。

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

4

2 回答 2

4

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

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

  1. 由于 InnoBD ( http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html )中也提供 MySQL 5.6 全文搜索,所以我认为您将失去 MyISAM 快速字符串搜索作为主要功能利益
  2. 使用 MyISAM,您不仅会失去对行锁定的支持,还会失去外键以及数据完整性 + 不要忘记 MyISAM “崩溃”
于 2013-05-14T16:29:05.703 回答
1

我会这样做:

在此处查看免费的 mysql 查询分析器。

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

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

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

于 2013-05-14T12:12:10.833 回答