我是否应该总是喜欢MySQL InnoDB而不是MyISAM?

时间:2009-12-28 16:06:54

标签: mysql database-design innodb myisam

有人告诉我InnoDB比MyISAM好多了。所以当我创建一个表时,我总是尝试使用InnoDB Engine而不是MyISAM吗?或者两者都有它的巨大好处?

6 个答案:

答案 0 :(得分:36)

MyISAM是无事务和堆组织的。记录由表中的行偏移标识,索引将此偏移存储为行指针。

InnoDB支持事务并且是索引组织的。记录由PRIMARY KEY(或隐藏的内部列没有定义PRIMARY KEY)的值标识,并存储在B-Tree中。辅助索引将PRIMARY KEY的值存储为行指针。

涉及全表扫描或二级索引查找的查询通常在MyISAM表上更快。

PRIMARY KEY表格中涉及InnoDB搜索的查询通常更快。

MyISAM表存储表格元数据中表格中的记录数量,这就是为什么这样的查询:

SELECT  COUNT(*)
FROM    myisamtable

是即时的。

MyISAM表完全锁定在DML操作上(有几个例外)。

InnoDB个表锁定单个记录和索引间隙,但这些是扫描的记录和间隙,而不仅仅是那些与WHERE条件匹配的记录和间隙。这可能导致记录被锁定,尽管它们不匹配。

InnoDB表支持参照完整性(FOREIGN KEY s)。 MyISAM表没有。

有几种方案可以显示两种引擎的好处。

答案 1 :(得分:11)

简单回答:不,你不应该。

关于每个引擎的几点:

<强> InnoDB的

  • 完全支持外键限制和交易。 (符合ACID)
  • 行级锁定。
  • 可以说是更快的INSERT语句。 (也可能更新)

<强>的MyISAM

  • 更快的SELECT语句。
  • 支持全文搜索
  • BLOB和TEXT列可以编入索引
  • 与InnoDB相比,最大存储限制为4倍(256TB对64TB)

请参阅手册中的更多内容:

答案 2 :(得分:8)

简单地说:

你应该使用InnoDB:

  • 如果您需要交易支持
  • 如果您需要外键

你应该使用MyISAM:

  • 如果您不需要上述和
  • 您需要速度(更快的数据库操作)

答案 3 :(得分:5)

恕我直言,你应该总是更喜欢InnoDB而不是MyISAM,因为事务支持是每个关系数据库系统的核心。

答案 4 :(得分:1)

InnoDB是一个完全符合ACID标准的数据库引擎,因此可以为事务等提供支持。因此,它可能比MyISAM数据库慢,后者倾向于在不同的方向进行优化。

因此,如果您需要事务,InnoDB(或其他RDBMS,如PostgreSQL)是显而易见的选择。

Wikipedia

进行了合理的比较

答案 5 :(得分:0)

你可以同时使用两者。您可以将InnoDB用于写入数据库/事务,但是从非规范化的MyISAM数据库读回。这给了两全其美。您知道InnoDB中的数据是安全的,并且您可以使用MyISAM快速读取它。