当前位置: 首页 > news >正文

索引以及索引底层数据结构

一、什么是索引?

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

二、为什么选择B+树

为什么不使用二叉树、B树,要使用B+树呢?

1、二叉树

在看B+ 树之前,我们先看一下二叉树 

左边这个二叉树的时间复杂度是O(log n),而右边这个二叉树查询的时间复杂度是O(n),就已经退化成一个链表了,二叉树的时间复杂度不稳定

2、红黑树

那么为什么不实用红黑树呢?

优点:红黑树的时间复杂度很稳定,它的时间复杂度是O(log n)

缺点:红黑树也是一个二叉树,每个节点只有两个分叉(只有两个字节点),如果要存储1000万的数据,那么它的层级就会很高(很多层),如果要查数据的话,还是不够高

3、B-树

B-Tree,B树是一种多叉路平衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。

以一棵最大度数为5(5阶)的B-Tree举例,那这个B树的每个节点最多存储4个key。 

灰色部分是指针,指向子节点的数据,子节点的数据大小都在两个蓝色数据之间

蓝色部分表示数据(key,键值)

绿色部分表示真正的数据(索引指向的数据)

跟二叉树一样,里面的数据都是左边小右边大,但是相比二叉树来说,由于最多有4个key和多个分支,B树的层级就比较短,可以称为矮胖树。层级短,查询的效率就高

4、B+树

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

首先,B+树也是多阶的,不同的点在于,

1、B+树的非叶子节点,只存储指针和key,不存储数据

2、上面的非叶子节点,只用来找到叶子节点的数据,而且非叶子节点上的数据也能在叶子节点上找到,比如图中的38、58等

3、叶子节点之间使用双向指针进行互相连接,如图中的6,12和16,18相连

相比于B树,B树有以下几个优势:

1、磁盘读写代价相比B+树更低;

如图中所示,如果要查询12 这个数据,由于B树的非叶子节点也是包含数据的,所以B树会加载出38中的(指针、key、数据),再加载出16和29中的(指针、key、数据),最后查询到12中的(指针、key、数据);

而B+树只有在叶子节点存储数据,非叶子节点只保存 指针和key值,只会查询12中的数据,前面的38和16则只和他们对比了key值,还有就是使用了38和16中的指针

2、查询效率B+树更加稳定

由于B+树的数据都保存在叶子节点,所以要查询什么数据,所要查询的层级(高度)是差不多的,查询效率更稳定

3、B+树便于扫库和区间查询

比如我们要查询6-34之间的数据,B+树,只要查询到6,再往右,使用双向指针进行查询到34为止即可,区间查询很快

综上所述优点,MySQL使用了B+树的索引结构

相关文章:

  • 【Elasticsearch】Retrieve inner hits获取嵌套查询的具体的嵌套文档来源,以及父子文档的来源
  • leetcode203.移除链表元素
  • 幂等与分布式锁的区别及应用场景
  • 前端自动化部署的极简方案
  • windows下docker使用笔记
  • 项目中一些不理解的问题
  • 解决Python升级导致PySpark任务异常方案
  • idea 无法下载源码
  • R-CNN
  • Java 中有哪些常见的语法糖?
  • 如何安装Hadoop
  • 旧手机热点无法提供ipv6解决方法(emui 8 热点提供ipv6)
  • 跳表(Skip List)详解
  • 【Cesium学习(十二)】Cesium常见问题整理总结
  • CSS基本选择器
  • 关于 形状信息提取的说明
  • Redis 的常见应用场景
  • IOS UITextField 无法隐藏键盘问题
  • LSTM 与随机森林的对比
  • stream流常用方法
  • 三大猪企4月生猪销量同比均增长,销售均价同比小幅下降
  • 报告:4月份新增发行的1763亿元专项债中,投向房地产相关领域约717亿元
  • 长江画派创始人之一、美术家鲁慕迅逝世,享年98岁
  • 江苏省人社厅党组书记、厅长王斌接受审查调查
  • 现场丨“影像上海”启幕:串联摄影、电影与当代艺术
  • 特朗普政府拟终止太空污染研究,马斯克旗下太空公司将受益