什么是索引
在数据库中,索引是一种已经排好序的数据结构
数据结构
- 二叉树
- 红黑树
- 哈希表
- B树
对比
-
搜索二叉树:将索引排序成一个搜索二叉树,每个节点的值指向对应表记录的磁盘地址。
- 优缺点
- 速度快,时间复杂度可以达到Ologn
- 当索引是自增的主键时,搜索二叉树将退化为单链表,因此存在局限性
- 优缺点
-
红黑树:在插入数据时,如果单边过长,会自动的平衡(自旋),相当于优化的搜索二叉树
- 优缺点
- 在搜索二叉树的基础上有更强的适应性
- 但是当数据量很大时(几千万),索引树的高度会非常高,这时如果我们查找的数据在靠底层的节点时,效率会非常的低下。因此,我们需要减少树的高度
- 优缺点
-
B tree:树的每个节点不再是一个元素,而是划分范围,每个节点的子节点处于父节点的范围中类似这样的图(本图为B+树,B树的子节点之间没有指针连接):
- 优缺点
- B树的引入大大降低了树的高度,可以提升我们的查找速度
- B树的每个节点中包含了本身的data,而计算机每次的磁盘IO有限度,为了使计算机每次可以尽可能多的将索引读入内存,我们需要减少节点的空间,因此引出了数据库使用的B树变种,B+树(注:mysql对每个节点的大小限制在16K)
- 优缺点
-
B+ tree:相对于B树,B+树的父节点只保存索引,只有叶子节点才保存索引和data,这样可以使得父节点包含更多的索引,同时B+树的叶子节点之间存在双向指针,便于范围搜索。