时间:2021-07-01 10:21:17 帮助过:6人阅读
外键方面
innodb 支持外键,而 myisam 不支持。对一个包含外键的 innodb 表转为 myisam 会失败。
索引层面
innodb 是聚簇索引,myisam 是非聚簇索引
myisam 支持 fulltext类型的全文索引, innodb 不支持 FULLTEXT 类型的全文索引,但是 innodb 可以使用 sphinx 插件支持全文索引,并且效果更好。
锁粒度方面
innodb 最小的锁粒度是 行锁 ,myisam 最小的锁粒度是 表锁 。
一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。
硬盘存储结构
myisam 在磁盘上存储成三个文件
innodb 存储引擎存储数据库数据,一共有两个文件(没有专门保存数据的文件):
聚簇索引(innodb)
将 数据 存储与 索引 放到了一块,索引结构的 叶子节点 保存了 行数据
表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。
innodb 中,在聚簇索引之上创建的索引称之为辅助索引,像复合索引、前缀索引、唯一索引等等。
非聚簇索引(MyISAM)
将 数据 与 索引 分开存储,表数据存储顺序与索引顺序无关
非聚簇索引存储结构(MyISAM)
MyISAM的 B+树 的叶子节点上,记录的是真实数据的存储地址。
比如通过主键id查询,MyISAM查询流程如下:
通过主键id查询的时候,InnoDB比MyIsam快一些,因为InnoDB只需要一次B+树查找就能取出数据。MyIsam通过B+树查找到地址后,还需要根据地址去查询真正的数据
还比如说在数据重构的时候,MyIsam记录的是数据地址,那么重构数据的时候地址就要重新生成一遍,这也是有问题的。
InnoDB重构数据的时候就不会这样,因为他记录的是主键id,地址会变化,主键id是不会变的。
聚簇索引存储结构(innodb)
InnoDB的 B+树 的叶子节点上,记录的是真实行数据。
比如通过主键id查询,InnoDB查询流程如下:
聚簇索引(主键索引):
辅助索引(聚簇索引以外的):
mysql myisam 和 innodb 的区别
标签:col sam 没有 image 取出 表数 定义 style 变化