【Mysql】索引

本文介绍了索引结构,包括二叉树、红黑树、B-树和B+树,重点讲解了B+树在存储海量数据时的优势。同时,讨论了聚集索引和非聚集索引的区别,以及它们在主键选择和数据存储上的影响。最后,阐述了执行计划中不同类型的索引使用情况,如唯一性索引和全表扫描。

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

一、索引结构

1.1 二叉树

一个根节点最多有2个节点

1.2 红黑树

  • 任意一结点到每个叶子结点的路径都包含数量相同的黑结点

从二叉排序树延伸而来,不同的是他会自旋来维持相对平衡。

1.3 B-树

在数量较多的情况下,红黑树会变得很高,而且只有2个子节点也不利于存储海量数据,这一个时候B-树应运而生。
在这里插入图片描述
这个树的特点就是:一个节点不在拘泥于存储一个数据

1.3 B+树

B-树已经可以解决层级过高的问题,为什么还要B+树呢?
在这里插入图片描述
二个重要特点:

  1. 只有叶子节点存数据
  2. 叶子节点之前是有链接的。

这个好处我举个例子,比如寻找19,应该是先找到15和18那个节点,发现没有,如果是B-树就要向上遍历,而B+树直接按着指针向右就可。

假如每页是默认大小16K,数据行是1K,主键是自增的(大约14b)。
叶子节点有是有数据的每个叶子节点是16/1 = 16个数据
非叶子节点中,每个节点和旁边的指针大概14b,所以每页大概16384/14 = 1170
树的高度是2: 大约 1170 * 16 = 18720
树的高度是3: 大约 11701170 * 16 = 21902400(一般树的高度就是3,也就是大约2千万数据)
树的高度是4: 大约 1170
1170*1170 * 16 = 25,625,808,000(这个就是上百亿级别了)

二、聚集索引

聚集索引是相对于非聚集索引的。
聚集索引:主键索引的b+树是既存储主键,也存储数据,这叫聚集
在这里插入图片描述

  1. 自增主键:首先比较方便,其次如果采用类似uuid的方式,一旦插入一个其他的主键值,那么为了维护B+树的特性就会就行频繁的调整,这是特别浪费时间的。自增主键就没有这个麻烦。
  2. 非主键索引存储的值是 主键的值

三、非聚集索引

非聚集索引:结构和聚集所以差不多,但是存储的数据却不是正在的数据,而是数据的地址。
在这里插入图片描述

四、执行计划的索引类型

  1. System:利用唯一性索引,得到一个数据,而且表中就一个数据(select id from table where id =1)
  2. Const:利用唯一性索引,得到一个数据(select id from table where id =1)
  3. eq_ref:利用唯一性索引,不过这个索引用于表的连接
  4. ref:非唯一性所以,比如叫“张三的有多个人”(select name from table where name =1)
  5. range:索引中存在 > < 等范围
  6. index:全表索引扫描
  7. all:全表扫描
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值