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

ope*_*rog 19 mysql database-design myisam innodb

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

Qua*_*noi 35

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

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

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

涉及搜索的查询PRIMARY KEY通常在InnoDB表格上更快.

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

SELECT  COUNT(*)
FROM    myisamtable
Run Code Online (Sandbox Code Playgroud)

是即时的.

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

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

InnoDB表支持参照完整性FOREIGN KEY.MyISAM表没有.

有几种情况可以显示两种引擎的好处.


Atl*_*tli 11

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

关于每个引擎的几点:

InnoDB的

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

MyISAM数据

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

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


Boz*_*zho 8

简而言之:

你应该使用InnoDB:

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

你应该使用MyISAM:

  • 如果你不需要上面的AND
  • 你需要速度(更快的数据库操作)

  • 您可能希望阅读http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/关于速度. (6认同)