讲索引之前让我们先看看一些常见的数据结构

1.hash

概念:是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值

时间复杂度和空间复杂度:O(1)

缺点:hash索引不支持范围查找,不支持排序

优点:时间复杂度低

比如现在hash表中有7条数据,要查询id为7的数据只需要一次就能查到,如下图

mysql索引剖析

2.二叉树

特点:左子树都比父节点小,右子树都比父节点大

让我们来看看二叉树的查找

平衡二叉树

mysql索引剖析

可见查询id为7的数据要比全表扫描要好.

但是如果我们从1开始插入数据的话,那么二叉树应该长这样

mysql索引剖析

          不平衡二叉树

显然,查找id为7的数据也需要7次,跟我们不建立索引是一样的效果

 缺点:存在不平衡问题

如果二叉排序树是平衡的,则n个节点的二叉排序树的高度为Log2n+1,其查找效率为O(Log2n),近似于折半查找。如果二叉排序树完全不平衡,则其深度可达到n,查找效率为O(n),退化为顺序查找。一般的,二叉排序树的查找性能在O(Log2n)到O(n)之间。因此,为了获得较好的查找性能,就要构造一棵平衡的二叉排序树。

3.红黑树

概念:在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能

看一下红黑树的插入过程

mysql索引剖析

 

 可以发现每次插入都会有一些操作来保证二叉树的平衡

缺点:和二叉树一样,存在不平衡的情况

比如,我们从1插到15,如下图,可见,右子树的节点还是比左子树多

mysql索引剖析

4.B+Tree

概念:B+ 树是一种树数据结构,通常用于数据库操作系统文件系统中。B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入

mysql索引剖析

b+树最下层的节点个数会小于上面所选中的degree数量,查找元素为7的只需要3次

B+Tree时间复杂度为logN

 

参考文章:https://blog.csdn.net/li_huai_dong/article/details/79911069

 

感觉有用的小伙伴点个赞,加个关注呗

相关文章:

  • 2021-06-05
  • 2021-09-02
  • 2021-11-22
  • 2022-12-23
  • 2021-05-21
  • 2021-08-10
  • 2021-11-28
猜你喜欢
  • 2021-07-06
  • 2021-10-04
  • 2021-07-29
  • 2022-01-14
  • 2021-11-10
  • 2021-07-26
  • 2021-07-14
相关资源
相似解决方案