几种索引算法

索引算法

1. 二叉树

1.1 二叉树特征

  • 每个节点最多有两个子节点
  • 左子节点和右子节点是有顺序的

2. 平衡二叉树(AVL树)

**平衡二叉树是一种特殊的二叉树,左右子树高度差不超过1,且每个子树都是平衡二叉树。**平衡二叉树的常用算法有红黑树、AVL、TREAP、伸展树、左偏树等。它在插入和删除的时候会通过特定算法自旋转来保持平衡,这种旋转比较耗时,因此比较适合插入和删除不是很多但查找多的情景。其查找效率是O(log(n)),n是树中元素的数目。

3. 红黑树

红黑树和AVL树都是自平衡二叉查找树,插入和删除元素时都会通过旋转来保持平衡。两者也有区别:

  • 平衡的实现机制:AVL树是根据树的平衡因数(所有子树的左右节点高度差不超过1)和旋转来决定是否平衡。而红黑树是根据节点颜色和一些约定和旋转来决定是否平衡。
  • 插入效率:红黑树的插入效率比AVL树高。因为红黑树并不追求“完全平衡”,这降低了对旋转的要求,从而提高性能。
  • 性能:红黑树的查找、插入和删除效率都为O(log2n)。也就是说红黑树查找效率比AVL略低,但是插入和删除效率比AVL高。因此,两者相比较,AVL树更适合不频繁插入和删除的静态数据场景,如果需要频繁进行插入和删除则使用红黑树更好。

4. B树

略。以后再补充。

5. B+树(Mysql)

这里只说Mysql中的B+树。

5.1 特征

  • 叶子节点存储了表的所有行记录
  • 叶子节点是有序的
  • 叶子节点之间是链表结构

5.2 走索引的前提下,Mysql是如何查询数据的


如上图,像上面索引值为30的行记录,mysql先把根节点加载到内存中通过折半查找法等算法快速定位到30所在的二级节点,然后把该二级节点的数据加载到内存中快速定位到30所在的叶子节点,进而再次通过折半查找法找到30的行记录。可以看出对于高度为3的B+树,一次查找需要进行三次磁盘IO(读取树节点到内存中)。此外,高版本的mysql会把非叶子节点默认都缓存到内存中,所以更是只要一次磁盘IO即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值