数据库学习笔记-MySQL索引数据结构

什么是索引

数据库查询是数据库的最主要功能之一,最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,还有二分查找(binary search)、二叉树查找(binary tree search)等;每种查找算法只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构。所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。

几种数据结构的分析

二叉树

在这里插入图片描述
从算法逻辑上讲,二叉查找树的查找速度和比较次数都是最小的。但要考虑一些极端场景,比如:
在这里插入图片描述
如果数据是单边增长的情况 那么出现的就是和链表一样的数据结构了,树高度大。从Mysql的角度讲,我们不得不考虑一个现实问题:磁盘IO。

查找都是索引操作,一般来说索引非常大,尤其是关系型数据库这种,当数据量比较大的时候,索引的大小有可能几个G甚至更多,数据量大的索引能达到亿级别,所以为了减少内存的占用,数据库索引是存储在外部磁盘上的。

当我们利用索引查询的时候,不可能把整个索引全部加载到内存,只能逐一加载每个磁盘页,磁盘页对应索引树的节点。

红黑树

在这里插入图片描述
在二叉树的基础上多了树平衡,也叫二叉平衡树,不像二叉树那样极端的情况会往一个方向发展。
红黑树的特点:

  • 节点是红色或黑色。
  • 根节点是黑色。
  • 每个叶子节点都是黑色的空节点(NIL节点)。
  • 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  • 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

因为这些规则限制,才保证了红黑树的自平衡。红黑树从根到叶子的最长路径不会超过最短路径的2倍。当插入或删除节点的时候,红黑树的规则可能被打破。这时候就需要做出一些调整, 来继续维持我们的规则。

在大规模数据存储的时候,红黑树往往出现由于树的深度过大而造成磁盘IO读写过于频繁,进而导致效率低下的情况。

B-Tree

在这里插入图片描述
B-Tree的定义

  • d为大于1的一个正整数,称为B-Tree的度。
  • h为一个正整数,称为B-Tree的高度。
  • 每个非叶子节点由n-1个key和n个指针组成,其中d<=n<=2d。
  • 每个叶子节点最少包含一个key和两个指针,最多包含2d-1个key和2d个指针,叶节点的指针均为null 。
  • 所有叶节点具有相同的深度,等于树高h。
  • key和指针互相间隔,节点两端是指针。
  • 一个节点中的key从左到右非递减排列。
  • 所有节点组成树结构。
  • 每个指针要么为null,要么指向另外一个节点。

为了提高查询效率,就需要减少磁盘IO数。为了减少磁盘IO的次数,就需要尽量降低树的高度,需要把原来“瘦高”的树结构变的“矮胖”,树的每层的分叉越多越好,因此B-Tree正好符合我们的要求,这也是B-Tree的特征之一。

原来的二叉树一个节点只存储一个数据,要想把它变“矮胖”,就需要在一个节点存储多个数据,同时为了查找必须保持节点结构的有序,这样B-Tree就应运而生了。B-Tree的特点就是每层节点数目非常多,层数很少,目的就是为了就少磁盘IO次数。

在B-Tree中进行查询时,在查询的中的比较次数其实不比二叉树少,尤其当单一节点中的元素数量很多时。可是相比磁盘IO的速度,内存中的耗时几乎可以忽略,所以只要树的高度足够低,IO次数足够少,就可以提高查询性能。

B+Tree

在这里插入图片描述

B-Tree有许多变种,其中最常见的是B+Tree,例如MySQL就普遍使用B+Tree实现其索引结构。
与B-Tree相比,B+Tree有以下不同点:

  • 每个节点的指针上限为2d而不是2d+1。
  • 内节点不存储data,只存储key;叶子节点不存储指针。

MySQL索引实现

后续补充。。。

参考资料:
https://blog.csdn.net/kongmin_123/article/details/82055901
https://blog.csdn.net/qq_36381855/article/details/80011876

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值