• 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

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

  • 相关阅读:
    Linux下Maven的安装与使用
    Vue1.0用法详解
    一个异步访问redis的内存问题
    jquery和zepto的异同
    我的学习归纳方法(以学习Maven为例)
    最显而易见的设计最容易成功
    Linux Command Backup
    Turn and Stun server · J
    Android apk签名详解——AS签名、获取签名信息、系统签名、命令行签名
    Leetcode 981. Time Based Key-Value Store(二分查找)
  • 原文地址:https://www.cnblogs.com/kiwi-deng/p/11175971.html
Copyright © 2020-2023  润新知