有人告诉我InnoDB比MyISAM好多了。所以当我创建一个表时,我总是尝试使用InnoDB Engine而不是MyISAM吗?或者两者都有它的巨大好处?
答案 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的强>
<强>的MyISAM 强>
请参阅手册中的更多内容:
答案 2 :(得分:8)
简单地说:
你应该使用InnoDB:
你应该使用MyISAM:
答案 3 :(得分:5)
恕我直言,你应该总是更喜欢InnoDB
而不是MyISAM
,因为事务支持是每个关系数据库系统的核心。
答案 4 :(得分:1)
InnoDB是一个完全符合ACID标准的数据库引擎,因此可以为事务等提供支持。因此,它可能比MyISAM数据库慢,后者倾向于在不同的方向进行优化。
因此,如果您需要事务,InnoDB(或其他RDBMS,如PostgreSQL)是显而易见的选择。
进行了合理的比较答案 5 :(得分:0)
你可以同时使用两者。您可以将InnoDB用于写入数据库/事务,但是从非规范化的MyISAM数据库读回。这给了两全其美。您知道InnoDB中的数据是安全的,并且您可以使用MyISAM快速读取它。