在此之前曾经写过一篇介绍 “innodb 索引结构了解 innodb index structure” 的文章,这次再接着分析一下 myisam 存储引擎索引的基本存储结构。 从索引基本的存放数据结构来说,myisam 的索引不论是 primary key 还是普通 index,存储结构都基本一样,基本结
在此之前曾经写过一篇介绍 “innodb 索引结构了解 – innodb index structure” 的文章,这次再接着分析一下 myisam 存储引擎索引的基本存储结构。
从索引基本的存放数据结构来说,myisam 的索引不论是 primary key 还是普通 index,存储结构都基本一样,基本结构都是 balance tree (简称为 b-tree),所有的键值详细信息和行“指针”信息都存放于 b-tree 的 leaf nodes 上面。这个基本的数据结构和 mysql 的其他存储引擎如 innodb 也基本相同。但是,myisam 的索引并不像 innodb 存储引擎那样 primary key 和 secondary index 中存放的数据存在较大区别。在 myisam 存储引擎中,primary key 和其他的普通 index 的主要区别仅仅在于 primary key 的索引键需要满足是非空的唯一值而已,另外一个区别其实也是每一个普通索引之间都存在的区别,就是整个索引树的键值排列顺序不太一样。
由于 myisam 存储引擎中数据行的存储分为固定长度和动态长度两种,所以在 myisam 存储引擎的数据文件中定位一行数据所需要信息也存在两种方式。一种是直接通过行号(row number)来定位固定长度表数据的行,另外一种是通过其他一些相对的文件位置标识信息来定位动态长度表数据的行,这里我们姑且将两种方式统称为rid(row id)吧。
下面这张图片展示了 myisam 索引的基本存储方式:
myisam index structure
原文地址:myisam 索引结构了解 – myisam index structure, 感谢原作者分享。