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表没有.
有几种情况可以显示两种引擎的好处.
简而言之:
你应该使用InnoDB:
你应该使用MyISAM: