1.InnoDB和MyISAM的区别
(1)InnoDB支持事务,而MyISAM不支持事务。InnoDB会将每一条SQL语句都默认封装成一个事务,自动提交,这样会影响速度,因此建议将多条SQL语句放在begin和commit之间组成一个事务。
(2)InnoDB支持外键,而MyISAM不支持外键。将一个包含外键的InnoDB表转换成MyISAM会失败。
(3)InnoDB是聚簇索引,使用B+树作为索引结构,数据文件和索引是放在一块的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,第一次先查询到主键,然后再通过主键查询到数据。因此,主键不应该太大,因为如果主键太大那么其他索引也会很大。在InnoDB的B+树中,主键索引的叶子节点存储的是数据文件,辅助索引的叶子节点存储的是主键值。

MyISAM是非聚簇索引,也是使用B+树作为索引结构,但是数据文件和索引是分开存储的。在MyISAM的B+树中,主键索引和辅助索引的叶子节点存储的都是数据文件的地址指针。

(4)InnoDB不支持全文索引(在5.7之后InnoDB也支持全文索引了),而MyISAM支持全文索引(在涉及全文索引的领域内使用MyISAM的速度更快)。
(5)InnoDB支持表级锁和行级锁(默认),而MyISAM只支持表级锁。InnoDB的行级锁是实现在索引上的,因此如果没有命中索引(例如:定义id列作为主键,但是在使用where子句进行过滤时,过滤条件并不是"where id = 1"),那么也就无法使用行级锁,此时就会退化为表级锁。
(6)InnoDB必须要有主键(如果用户没有定义主键的话,它会自己生

本文详细对比了MySQL的InnoDB和MyISAM存储引擎,包括事务支持、外键、索引类型、锁级别、主键要求、存储文件结构等方面。InnoDB支持事务和行级锁,适合高并发读写场景;MyISAM支持全文索引,适用于读取密集型表。选择存储引擎应考虑事务需求、读写比例、恢复难度等因素。
最低0.47元/天 解锁文章
636

被折叠的 条评论
为什么被折叠?



