有人告诉我,InnoDB比MyISAM好得多。因此,当我创建表时,是否应该 始终 尝试使用InnoDB Engine而不是MyISAM?还是两者都有很大的好处?
MyISAM是无事务的并且是堆组织的。记录由表中的行偏移量标识,索引将此偏移量存储为行指针。
MyISAM
InnoDB支持交易并按索引组织。记录由的值标识PRIMARY KEY(或PRIMARY KEY未定义隐藏的内部列),并存储在中B-Tree。二级索引将的值存储PRIMARY KEY为行指针。
InnoDB
PRIMARY KEY
B-Tree
涉及全表扫描或二级索引查找的查询通常在MyISAM表上更快。
涉及PRIMARY KEY查找的查询通常在InnoDB表上更快。
MyISAM 表在表的元数据中存储表中的记录数,这就是为什么这样的查询:
SELECT COUNT(*) FROM myisamtable
瞬间。
MyISAM表完全锁定在DML操作上(有几个例外)。
DML
InnoDB表锁定单个记录和索引间隙,但是这些是记录和扫描的间隙,而不仅仅是WHERE条件匹配的记录和间隙。尽管它们不匹配,但这可能导致记录被锁定。
WHERE
InnoDB表支持参照完整性FOREIGN KEY。MyISAM桌子没有。
FOREIGN KEY
有几种情况可以显示两种引擎的优势。