MySQL索引

1. 索引概述

  • 介绍

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

无索引情况和有索引情况查找对比:

备注: 这里我们只是假设索引的结构是二叉树,介绍一下索引的大概原理,只是一个示意图,并不是索引的真实结构,索引的真实结构,后面会详细介绍。
  • 优缺点

2. 索引结构

  • 概述

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种:

上述是MySQL中所支持的所有的索引结构,接下来,不同的存储引擎对于索引结构的支持情况。

注意:我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。

如果选择二叉树作为索引结构,会存在以下缺点:

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

可以选用红黑树,但依旧存在大数据量情况下,层级较深,检索速度慢的缺点。因此,MySQL索引结构选择B+ Tree。

  • B-Tree(多路平衡查找树)

以一颗最大度数( max-degree )为 5(5 ) 的B -Tree 为例,那这个 B 树每个节点最多存储 4 key 5
个指针:

构建B-Tree树的示例:100 65 169 368 900 556 780 35 215 1200 234 888 158 90 1000 88 120 268 250。

通过一个数据结构可视化的网站来演示:

B-Tree Visualization (usfca.edu)

进入该网站后,显示为如下界面:

选择Max.Degree=5,然后分别输入数据插入,最终可得如下结果:

  • B+Tree

一颗最大度数( max-degree )为4 (4 ) 的B+ Tree为例:

它与B-Tree树的区别:

1. 叶子节点包含了所有数据;

2. 叶子节点形成一个链表,它们之间有指针连接;

3. 非叶子节点仅起到数据索引作用,叶子节点存放具体数据。

同样,使用数据结构可视化网站演示如下:

B+ Tree Visualization (usfca.edu)

选择Max.Degree=4,输入数据,最终结果如下:

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

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值