0
点赞
收藏
分享

微信扫一扫

Mysql优化学习7-为什么说InnoDB索引即数据

Mysql优化学习7-为什么说InnoDB索引即数据

##1.聚簇索引(Clustered Index)

聚簇索引之所以叫聚簇索引不叫主索引,因为它包含了索引和数据,所以叫clustered集合的index。

Mysql优化学习7-为什么说InnoDB索引即数据

Mysql优化学习7-为什么说InnoDB索引即数据

从上图可以更加清晰详细的看到innodb的B+树结构下的节点存储结构。

每一个节点都分为下限指针,页号,上限指针他们存储的是条件信息和指针,然后同层的节点之间还有指针相连接。而真实环境中的根节点可以存储成千上万的跟节点。

在B+树种范围查找,比如要查找大于0小于5的数据,那么首先就查到大于0的第一个数据,然后到了最后一层就可以使用线性查找的方式来获取了。

##2.辅助索引(Secondary Index)

Mysql优化学习7-为什么说InnoDB索引即数据

辅助索引存储数据的方式与聚簇索引的方式不一样,虽然都是B+树,但是数据是不一样的,在辅助索引的B+树种, 我们还是拿上图讲,辅助索引存储的数据与聚簇索引刚好相反,第一行key值存储的是A,B,C,D这样的数据,第二行value值存储的是数据的Id,也就是1,2,3,4这样的,条件也是类似于>=A >=C这样的,最底层的叶子结点可以连接数据的主键,然后再到聚簇索引中找到这个主键的数据。

正是因为存储的数据不一样,所以一个数据库表中如果有一个主键,两个辅助索引,那么就可以说这个表有三个B+树,或者也可以说有三张表,聚簇索引的表存了所有的数据,而其他的辅助索引表中存储的key是索引字段,value是主键id。

所谓的回表也就是通过辅助索引查询到主键id,然后到聚簇索引中找到相应的数据 。

Mysql优化学习7-为什么说InnoDB索引即数据

举报

相关推荐

0 条评论