数据结构1:索引常用的数据结构

问题:数据库索引使用的数据结构是什么
答:B树或者B+树

0. 哈希表

  1. 定义:哈希表也叫作散列表,能够通过给定的关键字的值直接访问到具体对应的值的一个数据结构。
  2. 优点
    1)具有很快的查询速度,只要直到键的信息,根据公式,很快能够定位出具体位置
  3. 缺点
    1)以空间换时间,对空间要求高
    2)在索引的时候,不支持顺序和范围查询。
  4. 如何解决哈希冲突
    1)拉链法:在同一个哈希值的地方,加入一个链表**(JDK8以前是头插法,JDK8后是尾插法)**
    2)开放地址法:在哈希值后面添加上去
    3)再哈希法:同时构造多个不同的哈希函数

1. 二叉搜索树

  1. 二叉查找树定义:
    1)树的任意一个节点,其左子树的每个节点的值都要小于这个节点的值,而右子树节点的值都应大于这个节点的值。
  2. 特点:
    1)二叉搜索树是查询时间复杂度和删除,增加时间复杂度最好的结构
    2)但是二叉搜索树非常容易使得树的深度变为很大。
  3. 为什么不用二叉搜索树作为索引结构
    1)因为在索引查找的时候,每次对数层的查找都对应一次IO磁盘操作,在同一层内,是进行内存比较的;IO磁盘操作非常消耗资源,所以树的结构应该尽可能矮而胖

2. 二叉平衡树()AVL

  1. 二叉平衡树定义:一棵AVL树有如下必要条件:
    1) 条件一:它必须是二叉查找树
    2) 条件二:每个节点的左子树和右子树的高度差至多为1。
  2. 为什么不用二叉平衡树作为索引结构
    1)平衡的要求太高了,当主要是查找的时候,效率是非常高的,小于O(logn),但是如果有频繁的插入和删除,需要不断的变换结构,非常耗时。

3. 红黑树

3.1. 红黑树定义

1)根节点是黑色,叶子节点是不存储数据的黑色空节点
2)任何相邻的两个节点不能同时为红色
3)任意节点到其可达的叶子节点间包含相同数量的黑色节点。

3.2 特点

1)相较于二叉平衡树,红黑树对于平衡的概念就更弱了,左右子树高度差距范围为(0,2n),故查找的时间复杂度<2log(n+1)
2)在插入,查找和删除方面更加稳定。(这也是为什么经常用红黑树的原因)

3.3 红黑树和AVL树的区别

1)红黑树的查询性能略微逊色于AVL树,因为他比avl树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的avl树最多多一次比较,但是,红黑树在插入和删除上完爆avl树
2)avl树每次插入删除会进行大量的平衡度计算,而红黑树为了维持红黑性质所做的红黑变换和旋转的开销,相较于avl树为了维持平衡的开销要小得多

3.4. 为什么不用红黑树进行索引

1)红黑树往往出现由于树的深度过大过大,而导致磁盘IO读写过于频繁。

3.5. 红黑树常常作为查询的数据结构:

1)排序二叉树有不平衡的问题,可能左子树很长但是右子树很短,造成查询时性能不佳(logn退化成n)
2)完全平衡的二叉树能保证层数平均,从而查询效率高,但是维护又很麻烦,每次插入和删除有很大的可能要大幅调整树结构。
3)红黑树就是介于完全不平衡和完全平衡之间的一种二叉树,通过每个节点有红黑两种颜色、从节点到任意叶子节点会经过相同数量的黑色节点等一系列规则,实现了【树的层数最大也只会有两倍的差距】,这样既能提高插入和删除的效率,又能让树相对平衡从而有还不错的查询效率。
4)从整体上讲,红黑树就是一种中庸之道的二叉树

4. B树(B-,多路平衡查找树)(不叫B减树)

4.1. 定义:B树是一种多路平衡查找树,m阶的B树包含一下特征

1.根结点至少有两个子女。
2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
4.所有的叶子结点都位于同一层。
5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。

4.2. 特点

1)B树所有节点既存放键,也存放数据,
2)B树由于每个节点能存放多个数据,树的高度比AVL大大减小。
3)高度之间的查找时对应IO操作的,消耗资源大;在单个节点进行数据比较,是内存操作,消耗资源小。

4.3. 应用

1)B-树主要应用于文件系统以及部分数据库索引,比如著名的非关系型数据库MongoDB

5. B+树(多路平衡查找树)

5.1. 定义:B树是一种多路平衡查找树

5.2. 特点:

0)每个中间节点包含有k个元素和k个孩子(B树中是k-1个元素)
1)B+树非叶子节点只存放键,叶子节点存放键和数据
2).所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针
3) 叶子结点本身依关键字的大小自小而大顺序链接。

5.3. 优点

1)存储空间大:B+树中间节点只包含键,不包含数据,故有更多空间装键值
2)查询效率高:基于第一点,B+树会比B树更加矮胖,查询效率更高
3)查询效率稳定:B-树查询可在中间停止,而B+树一定是在叶子节点停止,故B+树更加查询更加稳定
聚集索引和非聚集索引(前者叶子节点包含数据,后者不包含,多一层查找)
4) 范围查找:B+树能够很快实现范围查找(在链表上做遍历),而B-树需要进行中序遍历

5.4. 应用

1)B树主要应用于大部分关系型数据库,如MYSQL

参考文章
1)知乎:程序员小灰的系列文章

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值