MySQL索引详解

索引介绍


索引是一种用于快速查询和检索数据的数据结构,其本质可以看成一种排序好的数据结构。

索引底层数据结构存在很多类型,常见的索引结构有:B数、B+数和Hash、红黑树。在MySql中,无论是Innodb还是MyIsam都是用了B+树作为索引结构。

索引的优缺点


优点:

  • 使用索引可以大大加快数据的检索速度(大大减少检索的数据量),减少IO次数,这也是创建索引的最主要的原因
  • 通过创建唯一性索引,可以保证数据库表中数据的唯一性。

缺点:

  • 创建索引和维护索引需要耗费许多时间。对当前表中的数据进行增删查改的时候,如果数据也有索引,那么索引也需要动态的修改,会降低SQL的执行效率。
  • 索引需要使用物理文件存储,也会耗费一定的空间。

索引底层的数据结构

1、B 树(B-Tree)

B 树是一种平衡的多路查找树。

  1. 结构特点:
    • 每个节点包含多个关键字和指向子节点的指针。
    • 所有叶子节点在同一层,保证了树的平衡。
    • 关键字数量满足一定的范围,通常是在一个节点中存储多个关键字,使得树的高度相对较低。
  2. 优势:
    • 适合磁盘存储,因为磁盘的读写操作是以块为单位的,B 树的节点可以充分利用磁盘块的空间,减少磁盘 I/O 次数。
    • 平衡的结构保证了查找、插入和删除操作的时间复杂度相对稳定,为 O (log n),其中 n 是树中节点的数量。

2、B + 树(B+Tree)

B + 树是在 B 树基础上进行改进的一种数据结构。

  1. 结构特点:
    • 非叶子节点只存储关键字和指向子节点的指针,不存储实际的数据记录。
    • 叶子节点包含所有的关键字和对应的数据记录,并且叶子节点之间通过指针形成链表。
  2. 优势:
    • 非叶子节点不存储数据记录,因此可以存储更多的关键字和指针,使得树的高度更低,进一步减少磁盘 I/O 次数。
    • 叶子节点形成的链表便于进行范围查询和顺序遍历。

3、红黑树

红黑树是一种自平衡二叉查找树,通过在插入和删除节点时进行颜色变换和旋转操作,使得树始终保持平衡状态;

  1. 结构特点:

    • 每个节点非红即黑;
    • 根节点总是黑色的;
    • 每个叶子节点都是黑色的空节点(NIL 节点);
    • 如果节点是红色的,则它的子节点必须是黑色的(反之不一定);
    • 从任意节点到它的叶子节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)。
  2. 优势:

    • 高效的查找性能: 作为一种二叉搜索树,红黑树保持了左子树节点值小于根节点值,右子树节点值大于根节点值的特性。这使得查找操作可以再O(log n)的时间复杂度内完成,其中n是树中节点的数量。
    • 自平衡性: 红黑树在插入和删除节点时,会通过旋转和重新着色等操作来保持树的平衡。这使得红黑树在动态变化的情况下仍然能够保持较好的性能,避免了普通二叉搜索树可能出现的极端不平衡的情况。
  3. 操作:

    • 插入操作: 插入新节点时,新节点通常被标记为红色。然后,根据红黑树的规则进行调整,可能需要进行旋转和重新着色操作,以确保红黑树的性质得到满足。
    • 删除操作: 删除节点时,首先找到要删除的节点,然后进行删除操作。删除后可能会破坏红黑树的性质,需要进行调整,同样可能涉及旋转和重新着色操作。
      在这里插入图片描述

4、哈希索引

  1. 结构特点:
    • 通过哈希函数将关键字映射到一个固定的位置,这个位置存储着对应的数据记录或者指向数据记录的指针。
  2. 优势:
    • 查找速度非常快,时间复杂度为 O (1),只要计算出哈希值,就可以直接定位到数据所在的位置。
  3. 局限性:
    • 不适合范围查询和排序操作,因为哈希函数的结果是随机的,无法保证数据的有序性。
    • 当存在哈希冲突时,需要进行额外的处理,可能会影响性能。

在这里插入图片描述

B 树& B+树两者有何异同呢?

  • B 树的所有节点既存放键(key) 也存放数据(data),而 B+树只有叶子节点存放 key 和 data,其他内节点只存放 key。
  • B 树的叶子节点都是独立的;B+树的叶子节点有一条引用链指向与它相邻的叶子节点。
  • B 树的检索的过程相当于对范围内的每个节点的关键字做二分查找,可能还没有到达叶子节点,检索就结束了。而 B+树的检索效率就很稳定了,任何查找都是从根节点到叶子节点的过程,叶子节点的顺序检索很明显。
  • 在 B 树中进行范围查询时,首先找到要查找的下限,然后对 B 树进行中序遍历,直到找到查找的上限;而 B+树的范围查询,只需要对链表进行遍历即可。
  • 综上,B+树与 B 树相比,具备更少的 IO 次数、更稳定的查询效率和更适于范围查询这些优势。

红黑树与 B + 树的区别?

  1. 结构特点:
    • 红黑树是二叉搜索树,每个节点最多有两个子节点。
    • B + 树是一种多路平衡查找树,每个节点可以有多个子节点。
  2. 高度和节点数量:
    • 红黑树的高度相对较高,随着节点数量的增加,树的高度也会增加。
    • B + 树的高度相对较低,由于每个节点可以有多个子节点,能够存储更多的关键字,从而减少树的高度。
  3. 叶子节点:
    • 红黑树的叶子节点没有特殊的连接关系。
    • B + 树的叶子节点通过指针连接成一个有序链表,便于进行范围查询和顺序遍历。
  4. 存储方式:
    • 红黑树通常用于内存中的数据结构,节点的存储和操作相对简单。
    • B + 树更适合用于磁盘存储,节点可以充分利用磁盘块的空间,减少磁盘 I/O 次数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值