29. MyISAM 索引实现?
注意,我们上面看到的都是 InnoDB 存储引擎下的索引实现。
MyISAM 索引的实现,和 InnoDB 索引的实现是一样使用 B+Tree ,差别在于 MyISAM 索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。
1)主键索引:
MyISAM引 擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM主键索引的原理图:
主键索引
- 这里设表一共有三列,假设我们以 Col1 为主键,上图是一个 MyISAM 表的主索引(Primary key)示意。可以看出 MyISAM 的索引文件仅仅保存数据记录的地址。
2)辅助索引:
**在 MyISAM 中,主索引和辅助索引在结构上没有任何区别,只是主索引要求 key 是唯一的,而辅助索引的 key 可以重复。**如果我们在 Col2 上建立一个辅助索引,则此索引的结构如下图所示:
辅助索引
- 同样也是一颗 B+Tree ,data 域保存数据记录的地址。因此,MyISAM 中索引检索的算法为首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,则取出其 data 域的值,然后以 data 域的值为地址,读取相应数据记录。
MyISAM 的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB 的聚集索引区分。