MySQL 索引相关的数据结构有两种,一种是 B+tree,一种是 Hash,那么为什么在 99.99% 很多情况下都使用的是 B+tree索引呢?
索引的底层数据结构是怎样的呢?
接下来就听小二娓娓道来。
一、索引是什么
MySQL 官方对索引的定义:索引是帮助 MySQL 高效获取数据的排好序的数据结构。所以,可以得出:索引是数据结构!
当然啦,上面两句话可能看起来很抽象,那么生活中有哪些索引的例子呢。
小二以上图《书籍》这本为例,书籍的目录就是按顺序排列的,有第一章,第二章...,这就是一种排好序的数据结构。
目录可以快速帮助我们通过页数快速定位到我们想看的章节,比如我们想看《书籍》第三章,翻到第55页...
小孩子不能看《书籍》哈,不然就会像小二一样流鼻血,哈哈哈。
那比如复杂一点,想要去图书馆找《书籍》这本书的时候。
图书馆往往会给书籍分类存放,索引是由一个个节点组成,根节点(图书馆)有中间节点(每个楼层的类别),中间节点下面又由子节点(每楼的每一排的类别),最后一层是叶子节点(具体书籍)。
可以看到,索引其实就是一棵倒挂着的树,是一种数据结构。
小二同时附上一个可视化数据结构网站,有了它学习数据结构简单明了。
可视化数据结构网站:
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
国外的网站访问略慢,当然你好不容易进去了问小二为啥不是中文,那当然是因为小二点了一下翻译啦。
二、二叉树系列
接下来简单说一说和 B+tree 相关的二叉树系列:二叉树、二叉查找树和平衡二叉树
1. 二叉树
什么是二叉树嘞?
每个节点至多只有二棵子树,左子树和右子树,次序不能颠倒。逻辑上二叉树有五种基本形态:空二叉树、只有一个根结点的二叉树、只有左子树、只有右子树、完全二叉树(特例为满二叉树)。遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次,有前序、中序、后序遍历。
不过,小二不会大篇幅讲二叉树的各种形态,遍历...,这篇的主角可是 B+tree。
当然啦,这个时候就有客官要跳出来了,小二明明就是不精通数据结构,还说得这么好听。
哈哈哈,看破不说破嘛,当然也有这方面的原因,大学学习的数据结构全部还给可爱的老师啦。
等小二拜读完《数据结构与算法之美》再出一期数据结构专题,现在就随便看看画的两个图讲究一下吧,结构还是比较简单的。
由于数据库索引是要求排好序的数据结构,所以二叉树是不满足使用场景的,那么为了解决排好序这个问题,那么就引出了二叉查找树。
2. 二叉查找树
什么是二叉查找树嘞?
二叉查找树又名二叉搜索树,在满足二叉树的条件下,左子树的节点值总是小于根的节点值,右子树的节点值总是大于根的节点值,也就是左子树节点值 < 根的节点值 < 右子树节点值。