一、索引结构
1.1 二叉树
一个根节点最多有2个节点
1.2 红黑树
- 任意一结点到每个叶子结点的路径都包含数量相同的黑结点
从二叉排序树延伸而来,不同的是他会自旋来维持相对平衡。
1.3 B-树
在数量较多的情况下,红黑树会变得很高,而且只有2个子节点也不利于存储海量数据,这一个时候B-树应运而生。

这个树的特点就是:一个节点不在拘泥于存储一个数据
1.3 B+树
B-树已经可以解决层级过高的问题,为什么还要B+树呢?

二个重要特点:
- 只有叶子节点存数据
- 叶子节点之前是有链接的。
这个好处我举个例子,比如寻找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: 大约 11701170*1170 * 16 = 25,625,808,000(这个就是上百亿级别了)
二、聚集索引
聚集索引是相对于非聚集索引的。
聚集索引:主键索引的b+树是既存储主键,也存储数据,这叫聚集

- 自增主键:首先比较方便,其次如果采用类似uuid的方式,一旦插入一个其他的主键值,那么为了维护B+树的特性就会就行频繁的调整,这是特别浪费时间的。自增主键就没有这个麻烦。
- 非主键索引存储的值是 主键的值
三、非聚集索引
非聚集索引:结构和聚集所以差不多,但是存储的数据却不是正在的数据,而是数据的地址。

四、执行计划的索引类型
- System:利用唯一性索引,得到一个数据,而且表中就一个数据(select id from table where id =1)
- Const:利用唯一性索引,得到一个数据(select id from table where id =1)
- eq_ref:利用唯一性索引,不过这个索引用于表的连接
- ref:非唯一性所以,比如叫“张三的有多个人”(select name from table where name =1)
- range:索引中存在 > < 等范围
- index:全表索引扫描
- all:全表扫描
本文介绍了索引结构,包括二叉树、红黑树、B-树和B+树,重点讲解了B+树在存储海量数据时的优势。同时,讨论了聚集索引和非聚集索引的区别,以及它们在主键选择和数据存储上的影响。最后,阐述了执行计划中不同类型的索引使用情况,如唯一性索引和全表扫描。

被折叠的 条评论
为什么被折叠?



