innodb 作为 mysql 中使用最为广泛的 事务型存储引擎,不仅在事务实现数据版本控制方面和其他存储引擎有一定的区别,其数据结构也是以非常有特点的方式存储的。 每个innodb表的数据其实可以说就是以一个树型(b-tree)结构存储的,表的数据和主键(primary k
innodb 作为 mysql 中使用最为广泛的 事务型存储引擎,不仅在事务实现数据版本控制方面和其他存储引擎有一定的区别,其数据结构也是以非常有特点的方式存储的。
每个innodb表的数据其实可以说就是以一个树型(b-tree)结构存储的,表的数据和主键(primary key)共同组成了一个索引结构,也就是我们常说的innodb的clustered primary key。在这个clustered primary key中,leaf nodes其实就是实际的表记录,我们常规理解上的索引信息全部在branch nodes上面。
除了clustered primary key之外的其他所有索引在innodb中被称为secondary index。secondary index就和普通的b-tree索引差不多了,只不过在secondary index的所有leaf nodes上面同时包含了所指向数据记录的主键信息,而不是直接指向数据记录的位置信息。
所以,在 innodb 中,如果主键值占用存储空间较大的话,会直接影响整个存储 innodb 表所需要的物理空间,同时也会直接影响到 innodb 的查询性能。
下面是画的一张 innodb 索引基本结构图,包括 primary key 和 secondary index 两种索引的比较。
原文地址:innodb 索引结构了解 – innodb index structure, 感谢原作者分享。