一尘不染

我应该总是比MyISAM更喜欢MySQL InnoDB吗?

mysql

有人告诉我,InnoDB比MyISAM好得多。因此,当我创建表时,是否应该 始终 尝试使用InnoDB
Engine而不是MyISAM?还是两者都有很大的好处?


阅读 246

收藏
2020-05-17

共1个答案

一尘不染

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 KEYMyISAM桌子没有。

有几种情况可以显示两种引擎的优势。

2020-05-17