MySQL索引底层数据结构之B+树

B+树
哈希索引

  当我们查询数据的时候,单点数据查询效率最高的是哈希索引,时间复杂度O(1),但是当查询数据是一个范围的话,那么由于哈希表的数据组织结构是无序的,对于范围查询不友好,必须全表扫描。效率低下。

二分查找

  为了克服这个缺点,需要有序的数据结构来实现范围查询,想到有序数组的二分查找,时间复杂度是O(logn),此时对于数组的增加、插入、删除等效率较低,时间复杂度O(n)。

二叉搜索树(BST)

  那么又提出新的数据结构BST(二叉搜索树),查找,增加,删除,插入时间复杂度都在O(logn),但是极端情况下二叉搜索树会退化成单链表,查找效率O(n)。

高度平衡的二叉搜索树

  此时保证二叉搜索树的左右子树高度平衡才行,所以采用高度平衡的二叉搜索树才能(如AVL,红黑树),但是当数据量巨大时,树的高度仍然很高(树高等价于访问磁盘I/O的次数),查询效率低。

多叉树(B树)

  此时引入多叉树,降低树的高度,称B树。查找效率仍然是O(logn),但是范围查找时,需要中序回溯。效率不高。

B树升级版:B+树

  在B树的结构上做调整,叶子节点采用双链表结构连接,避免的中序回溯。

B树和B+树的区别。
  1. B树每个节点都存放索引+数据,查找时间复杂度为O(1)~(Ologn),不稳定。B+树叶子节点存放数据,非叶子节点存放索引,查找固定时间复杂度O(logn)。稳定
  2. B+树中非叶子节点只存放索引,占用空间小,那么操作系统基于页式管理方式,一个页面对于的物理块大小固定,一个页中能存放的索引越多(可以理解为m叉树中m越大),那么树高就越小,I/O次数就少,性能就高。
  3. B树在范围查找的时候找下一个节点需要中序遍历回溯,性能较差。而B+树数据存放在叶子节点,查找下一个数据只需要遍历链表即可,性能较优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值