什么是索引?
索引是帮助Mysql高效获取数据的数据结构(是有序),是满足特定查询算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据。
二叉树
索引底层的数据结构
时间复杂度角度:左侧比较平衡的例子是logN,而右边的是O(n)
红黑树:节点是比较平衡的logN时间复杂度,每层只有两个子节点
如果数据是1000万,如果是使用红黑树,那么红黑树的深度会非常高。那么查询的效率也不高
B-Tree是一种多叉路衡查找树,相对二叉树,b树每个节点可以有多个分支(多叉)。以一颗最大度数为5的b树为例,每个节点最多存储4个key
B+Tree是在B数基础上的一种优化,使其更适合实现外存储索引结构,InnDB存储引擎就是B+树实现其索引结构
B树和B+树对比:
- 磁盘读写代价B+更低
- 查询效率B+更加稳定
- B+树便于扫库和区间查询