图形式理解myisam和innodb索引区别

mysql两大主要引擎为myisam和innodb,那这两个引擎有什么区别呢?

我们先新建两个除了引擎不同其他完全相同的表。

磁盘文件:

MyIsam表的磁盘文件有三个,(以表名为 table_myisam 为例)

  1. table_myisam.frm      (保存表结构:  FoRM)
  2. table_myisam.MYI     (保存索引    MYisam Index)
  3. table_myisam.MYD      (保存数据   MYisam Data)

Innodb表的磁盘文件有三个,(以表名为 table_Innodb 为例)

  1. table_Innodb.frm      (保存表结构  FoRM)
  2. table_Innodb.ibd     (保存索引和数据   InoodB Data)

---------------------------------------------

数据存储

MyIsam:索引和数据是分离的,索引保存的是数据的物理地址(非聚簇索引),数据可以是离散的,如图:

(图片均来源网络)

图形式理解myisam和innodb索引区别_第1张图片

Innodb:索引和数据是放在一块的,索引的叶子节点顺序保存了数据本身,而不是数据的物理地址(聚簇索引),如图:

 

图形式理解myisam和innodb索引区别_第2张图片---------------------------------------------

索引结构

当有多个索引时:

MyIsam:每个索引存储的都是数据的实际地址

 

图形式理解myisam和innodb索引区别_第3张图片

优点:不管从什么索引搜索,都会直接定位到磁盘文件地址

缺点:当增删改数据时导致数据磁盘物理地址变更时,需要维护所有索引

Innodb:辅助索引上存储的是主键索引的值,也就是用非主键索引查找数据时,先通过辅助索引的值找到主键索引的值,再通过主键索引寻找数据,当无主键时,mysql自动创建一个隐藏的默认的6位整数作为主索引。

图形式理解myisam和innodb索引区别_第4张图片

优点:当增删改数据时导致数据磁盘物理地址变更时不需要维护所有索引,大大减少了维护索引所花的时间

缺点:所有索引找到的是对应的主键值,需要再根据主键找实际数据。

点击这里查看博主其他博客

你可能感兴趣的:(数据库,底层原理)