索引
1. 问题?什么是索引
索引(index) 是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),
这些数据结构以某种方式引用 (指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
维护树的数据结构,提高查找效率,减少IO的操作
B+树、二叉树、红黑树、B树
2. 数据结构对比
MySQL默认使用的索引底层数据结构是B+树。再聊B+树之前,我们先聊聊二叉树和B树
B-Tree,B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。
以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key
B+Tree是在BTree基础上的一种优化,使其更适合实现外存储索引结构,InnoDB存储引擎就是用B+Tree实现其索引结构
B树与B+树对比:
- 磁盘读写代价B+树更低(非叶子节点不存储数据);
- 查询效率B+树更加稳定(数据都存储在叶子节点);
- B+树便于扫库和区间查询(叶子节点之间使用的双向指针)
3. 问题总结
4. 问答