首页 /  技术专区  /  Mysql 宽屏模式 >

Mysql索引

索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

Image.png


数据结构对比

MySQL默认使用的索引底层数据结构是B+树。再聊B+树之前,我们先聊聊二叉树和B树

Image.png

二叉搜索树(Binary Search Tree)

二叉搜索树(Binary Search Tree)是一种基于二叉树结构的数据结构,具有以下特点:

  • 每个节点最多有两个子节点:左子节点和右子节点。

  • 对于每个节点,左子节点的值小于该节点的值,右子节点的值大于该节点的值。

  • 通过这种结构,可以实现高效的查找、插入和删除操作,时间复杂度为 O(log n),其中 n 是树中节点的数量。

最坏二叉树(Worst-case Binary Tree)

最坏情况下,二叉搜索树可能退化成链表结构,导致查找、插入和删除操作的时间复杂度变为 O(n),这种情况下称为最坏二叉树(Worst-case Binary Tree)。为了解决最坏情况下性能下降的问题,人们提出了各种改进的树结构,其中红黑树就是一种常见的自平衡二叉搜索树。


红黑树(Red-Black Tree)

红黑树(Red-Black Tree)是一种自平衡二叉搜索树,具有以下特点:

  • 每个节点上都带有颜色属性,红色或黑色。

  • 满足以下红黑树性质:

  1. 每个节点要么是红色,要么是黑色。

  2. 根节点是黑色。

  3. 每个叶子节点(NIL 节点)都是黑色。

  4. 如果一个节点是红色,则其子节点必须是黑色。

  5. 对于任意节点,从该节点到其子孙节点的所有路径上包含相同数目的黑色节点。

通过满足这些性质,红黑树保持了整棵树的平衡,避免了二叉搜索树退化为链表的情况,从而保证了较为稳定的查找、插入和删除操作的时间复杂度为 O(log n)。

总结来说,二叉搜索树是一种基本的数据结构,但在最坏情况下性能可能下降;最坏二叉树表示二叉搜索树在最坏情况下的状态;而红黑树则是一种自平衡的二叉搜索树,通过维护特定的性质来保证树的平衡性。


BTree

BTree,B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key

  • B树是一种多路平衡查找树,每个节点可以包含多个子节点。

  • 每个节点中既存放数据,也存放索引,数据节点和索引节点的结构相同。

  • 在B树中,每个节点都包含了关键字和对应的子树指针。

  • B树的特点是所有叶子节点位于同一层,且叶子节点之间通过指针连接,可以支持范围查询。

Image.png


B+Tree

B+Tree是在BTree基础上的一种优化,使其更适合实现外存储索引结构,InnoDB存储引擎就是用B+Tree实现其索引结构

  • B+树也是一种多路平衡查找树,但只有叶子节点存储数据,非叶子节点只存储索引。

  • 叶子节点通过指针连接形成链表,便于范围查询和顺序遍历。

  • 非叶子节点只包含索引信息,不存储数据,可以容纳更多的索引,减少树的高度,提高检索效率。

  • B+树的特点是所有数据都存储在叶子节点中,非叶子节点仅用作索引,有利于减少磁盘I/O次数。

Image.png

B树与B+树对比:

①:磁盘读写代价B+树更低;

②:查询效率B+树更加稳定;

③:B+树便于扫库和区间查询





头像
0/200
图片验证码