索引的数据结构

概念

数据库的索引属于一种特殊的文件,它用来保存我们数据表中所有记录的引用指针。

作用

主要是为了加速数据的查询速度。

常见的数据结构

顺序查找

最基本的查询方式,时间复杂度为O(N),但是当出现大量数据的时候,他的效率会非常的低。

二叉树查找

由于数据记录时,逻辑上地址相邻的的数据记录在磁盘上的物理地址不一定是相邻的,此时为了加快数据记录的查找,可以维护一个二叉树,二叉树中每个节点都包含着索引的key键值以及指向对应数据记录物理地址的一个引用指针,这样就可以在O(logN)的复杂度内完成查找。

哈希表查找

通过哈希表来实现存储索引键值以及对应数据地址的指针,但是维护一个哈希表的开销过大,同时哈希表也无法实现范围查找,业务功能较差。

B-Tree

B-树中的结点都是二维数组,并且二维数组的每个元素数组,长度都为2,其中第一个元素会保存索引对应的一个键值key,第二个元素会保存key以外的一些数据data。

它首先会从根结点进行二分查找,找到就返回相应结点的data。找不到的话
就会对相应区间指针指向的结点进行递归查找,直到找到为止,没找到就返回null。

B-树的主要问题就是每次新插入或者删除结点时,就会破坏B-树的特性,就需要重新对树的结构进行一个拆分合并等重建操作,这样动用的开销会比较大。

B+Tree

B+树是对B-树的一个变种,与B-树不同的是,它的非叶子结点不会保存data数据,只存储key的值,只有叶子结点才会保存data数据。

MySQL在B+树的基础上作出了优化,添加了顺序访问的指针,它在每个叶子结点上增加了一个指向相邻叶子结点的指针。在进行区间查找时,只需要先找到区间最开始的结点,然后顺着结点和顺序指针向后一次性查找到所有的结点,而不需要再返回到上一层进行递归重复查找,很大程度地提高了区间查找的效率。

索引本身其实是比较大的,无法全都存储在内存中,所以索引通常都会以索引文件的形式存储在磁盘中。因为索引查找中产生的磁盘I/O消耗比内存存取的消耗要高几个数量级,所以索引底层数据结构的实现要尽可能的减少磁盘I/O的存取次数,以提升索引的效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值