【MySQL进阶】索引(一)

文章介绍了数据库索引的概念和作用,重点讨论了不同类型的索引结构,如二叉树、红黑树、B树和B+树,以及它们在数据检索效率上的差异。特别强调了MySQL中InnoDB存储引擎使用B+树作为索引结构的原因,同时提到了Hash索引的特点,它适用于等值查询但不支持范围查询。InnoDB引擎还会根据条件自适应地构建Hash索引以提升性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、索引概述

1. 介绍

在这里插入图片描述

  • 索引(index)是帮助MySQL高效获取数据数据结构索引是有序的)。
  • 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

2. 举例

在这里插入图片描述

3. 优缺点

在这里插入图片描述

二、索引结构

1. 介绍

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构。

在这里插入图片描述

2. 举例

在这里插入图片描述

  • 平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引

4. 二叉树

在这里插入图片描述

  • 二叉树在顺序插入时,会形成一个链表,查询性能大大降低。
  • 在大数据量情况下,二叉树的层级较深,检索速度慢。

5. 红黑树

在这里插入图片描述

  • 红黑树是自平衡的二叉树(特殊的二叉树),可以解决二叉树的顺序链表问题。
  • 但是红黑树本身也是二叉树,同样也存在大数据量下,层级较深,检索速度慢的问题。

6. B树

在这里插入图片描述

  • B树(B-Tree:多路平衡查找树)
  • 树的度数指的是一个节点的子节点个数,一颗最大度数(max-degree)为5(5阶)的B树,其每个节点的子节点个数最多为5个,且其最多存储4个key和5个指针。
  • 每个节点都存储了索引值+数据。
    在这里插入图片描述

7. B+树

在这里插入图片描述

  • B+树实际上是B树的变种
  • 在B+树中所有的元素(索引值+数据)都出现在叶子节点,非叶子节点只存储索引值,起到索引的作用。
  • 每一个叶子节点都存储一个单向指针,指向下一个叶子节点,最终形成一个单向链表。

在这里插入图片描述

8. MySQL中的B+树索引结构【重要】

在这里插入图片描述

  • MySQL索引数据结构对经典的B+树进行了优化
  • 在原B+树的基础上,增加一个指向相邻叶子节点的指针,形成了带有顺序指针的B+树,提高区间访问的性能。

9. Hash索引

在这里插入图片描述

  • Hash索引就是采用一定的Hash算法,将键值换算成新的Hash值,映射到对应的槽位上,然后存储在Hash表中。
  • 如果两个(或多个)键值,映射到同一个槽位上时,就会产生Hash冲突(也成Hash碰撞),可以通过链表解决。
  • Hash索引只能用于对等比较(=,in)不支持范围查询(between,>,<,…)
  • Hash索引无法利用索引完成排序操作,因为Hash运算出来的结果是无序的
  • 但是其查询效率高,通常只需要一次检索就能查出,效率通常要高于B+树索引
  • 在MySQL中,支持Hash索引的是Memory引擎,但是InnoDB引擎中具有自适应Hash功能,根据B+树索引在指定条件下自动构建Hash索引

三、为什么InnoDB存储引擎选择使用B+树索引结构?

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值