1. 索引概述
-
介绍
无索引情况和有索引情况查找对比:
备注: 这里我们只是假设索引的结构是二叉树,介绍一下索引的大概原理,只是一个示意图,并不是索引的真实结构,索引的真实结构,后面会详细介绍。
-
优缺点
2. 索引结构
-
概述
MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种:
上述是MySQL中所支持的所有的索引结构,接下来,不同的存储引擎对于索引结构的支持情况。
注意:我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。
如果选择二叉树作为索引结构,会存在以下缺点:
- 顺序插入时,会形成一个链表,查询性能大大降低。
- 大数据量情况下,层级较深,检索速度慢。
可以选用红黑树,但依旧存在大数据量情况下,层级较深,检索速度慢的缺点。因此,MySQL索引结构选择B+ Tree。
-
B-Tree(多路平衡查找树)
构建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
它与B-Tree树的区别:
1. 叶子节点包含了所有数据;
2. 叶子节点形成一个链表,它们之间有指针连接;
3. 非叶子节点仅起到数据索引作用,叶子节点存放具体数据。
同样,使用数据结构可视化网站演示如下:
B+ Tree Visualization (usfca.edu)
选择Max.Degree=4,输入数据,最终结果如下:
MySQL索引数据结构对经典的B+Tree进行了优化。它在原有的基础上,增加一个指向相邻叶子节点的链表指针,形成带有顺序指针的B+Tree,提高区间访问的性能,利于排序。