mysql索引剖析

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

1.hash

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

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

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

优点:时间复杂度低

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

2.二叉树

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

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

平衡二叉树

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

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

          不平衡二叉树

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

 缺点:存在不平衡问题

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

3.红黑树

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

看一下红黑树的插入过程

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

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

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

4.B+Tree

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

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

B+Tree时间复杂度为logN

5.Btree

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

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

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

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

原文地址:https://www.cnblogs.com/kiwi-deng/p/11175971.html