美文网首页
深入理解Mysql索引底层数据结构与算法

深入理解Mysql索引底层数据结构与算法

作者: 桑翔 | 来源:发表于2020-11-24 20:06 被阅读0次

一.索引的本质

索引是帮助MySQL高效获取数据的排好序的数据结构

二.索引数据结构

1.二叉树

2.红黑树

    \color{red}{缺点:当数据量庞大的时候,红黑树高度不可控,容易使树的高度太大,不利于快速检索数据}

3.Hash表

  \color{red}{优点:对检索条件进行hash运算,然后通过hash表得到磁盘数据映射地址,可以很快获取数据,跟数据量大小不成正比}

4.B-Tree

    1.叶节点具有相同的深度,叶节点的指针为空

    2.所有索引元素不重复

    3.节点中的数据索引从左到右递增排序\color{red}{缺点:B-Tree中每个节点中带有data数据,这个data数据如果存储Mysql中的一行数据,这一行数据列数很多,就会占用磁盘空间,使节点变少,树的高度也不可控}

B-Tree

5.B+Tree

    1.非叶子节点不存储data,可以放更多的索引

    2.叶子节点包含所有索引字段

    3.叶子节点用指针连接,提高区间访问的性能(体现在做范围查询的时候)    

B+Tree

三.MyISAM存储引擎索引实现

        MyISAM索引文件(MYI)和数据文件(MYD)是分离的(非聚集)

四.InnoDB索引实现(聚集)

 1.表数据文件本身就是按B+Tree组织的一个索引结构文件

 2.聚集索引-叶节点包含了完整的数据记录(观察最后的叶子结点)

 3.为什么InnoDB表必须有主键,并且推荐使用整型的自增主键?

\color{red}{底层采用B+Tree,所以必须有主键}

   \color{red}{整型容易比较大小,叶子结点自增的利于维护,不至于导致结点分裂和平衡}

4.为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)

    \color{red}{因为主键索引的时候已经存储了所有的行数据,没必要再非主键索引的叶子结点再去存储一遍}

五.联合索引

    底层的数据结构长什么样子? 

相关文章

网友评论

      本文标题:深入理解Mysql索引底层数据结构与算法

      本文链接:https://www.haomeiwen.com/subject/wdosiktx.html