什么是索引?
排好序、快速查找的B+树数据结构
- hash:对于普通的增删改查,仅查找一次,时间复杂度为O(1),但对于范围查找和排序查找不合适,时间复杂度会变为为O(n),而树的时间复杂度会一直保持O(log2(n)),这样更加稳定。
- 二叉树:每一个节点上都会有两个根节点,左节点大于右节点,但会带来一种问题:极端情况下会发生右倾的错误,无法保证平衡,由二叉树退化成链表,复杂度由O(log2(n))变为O(n)。
二叉树右倾情况:
- 平衡二叉树(AVL):在二叉树的基础上通过旋转解决了平衡的问题,但会带来新的问题,随着数据的增多,会使树的高度变大,从而会产生磁盘IO会增加 ,这样系统性能会下降。在最坏的情况,磁盘IO次数等于树的高度。
平衡二叉树:
红黑树:
- B树:会在平衡二叉树的基础上降低树的高度,从而减少IO次数。数据存放在根、枝、叶子节点上。因为磁盘页的存储空间是固定的,如果数据较大会导致存储的键值少,这样会使树的高度变大影响IO进而影响查询效率。
- B+树:与B树不同的是,所有的数据都存放在叶子节点,非叶子节点不存放数据,只存放键值和引用,并且叶子节点之间有指针相连,最终形成链表,方便查找不需要进行中序遍历。