mysql nullpoint_mysql索引剖析

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

1.hash

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

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

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

优点:时间复杂度低

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

aa95755c7f6947d33d6aed77d3c5a052.gif

2.二叉树

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

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

平衡二叉树

8430c41ee0209910a9db7c0b290882d0.gif

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

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

1b5ab428b2429fe60372ac6335a58aa1.png

不平衡二叉树

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

缺点:存在不平衡问题

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

3.红黑树

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

看一下红黑树的插入过程

4fd4060caf431f2c0f4347605d2e893d.gif

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

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

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

79d4e9d8b2efc9be00bcdee62f8f6398.png

4.B+Tree

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

d8ed0df7afc0b73af50a22ac96fcef88.gif

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

B+Tree时间复杂度为logN

5.Btree

Btree与B+ Tree不同点: B+ tree只有在末节点存储数据,而btree 在所有节点都存储数据

同时将 1,1,2,3,3这几个数插入Btree和B+ tree中

c987a6dd38fc6bc7d0eca288d7492ee2.png

f10fe9b4bafe66e2bee870c3a786b1bf.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值