一 数据库为什么使用B+树

1. 与二叉树相比
二叉树相比于顺序查找的确减少了查找次数,但是在最坏情况下,二叉树有可能退化为顺序查找。而且就二叉树本身来说,当数据库的数据量特别大时,其层数也将特别大。二叉树的高度一般是log_2^n,B树的高度是log_t^((n+1)/2) + 1,其高度约比B树大lgt倍。n是节点总数,t是树的最小度数。

假如每个盘块可以正好存放一个B树的结点(正好存放2个文件名)。那么一个BTNODE结点就代表一个盘块,而子树指针就是存放另外一个盘块的地址。

下面,咱们来模拟下B树索引查找文件29的过程:

  • 根据根结点指针找到文件目录的根磁盘块1,将其中的信息导入内存。【磁盘IO操作 1次】
  • 此时内存中有两个文件名17、35和三个存储其他磁盘页面地址的数据。根据算法我们发现:17<29<35,因此我们找到指针p2。
  • 根据p2指针,我们定位到磁盘块3,并将其中的信息导入内存。【磁盘IO操作 2次】
  • 此时内存中有两个文件名26,30和三个存储其他磁盘页面地址的数据。根据算法我们发现:26<29<30,因此我们找到指针p2。
  • 根据p2指针,我们定位到磁盘块8,并将其中的信息导入内存。【磁盘IO操作 3次】

此时内存中有两个文件名28,29。根据算法我们查找到文件名29,并定位了该文件内存的磁盘地址。

2. 与B树相比
B树在提高IO性能的同时,并没与解决元素遍历时效率低下的问题,正是为了解决这个问题,B+数应运而生。B+数只需遍历叶子节点即可实现整棵树的遍历,而B树必须使用中序遍历按序扫库,B+树支持范围查询非常方便。这才是数据库选用B+树的主要原因。

另外,最后说一下,并不是说B+树就比B树好,有很多基于频率的搜索是选用B树,越频繁query的结点越往根上走,前提是需要对query做统计,而且要对key做一些变化。
无论是B树还是B+树由于前边几层反复query,因此早已被加载入内存,不会出现读磁盘IO。一般启动的时候,就会主动换入内存。在内存中B+树并没有优势,只有在磁盘中B+树的威力才能显现。

参考文献:

B树高度计算
B+树和B树读取磁盘过程

为什么MySQL索引更适合B+树而不是二叉树、B树相关推荐

  1. 如何让mysql索引更快一点

    后端开发,公众号内容包括但不限于 python.mysql.数据结构和算法.网络协议.Linux.技术人怎能只有技术和代码,如果你对投资理财.保险,英语学习.读书写作有兴趣,都欢迎来公众号[谭某人]与 ...

  2. MySQL 怎么变快_如何让mysql索引更快一点

    在 InnoDB 中,从二级索引回到主键索引查询数据,这个过程称作回表过程,而且这个回表过程是可以被优化的,这个优化就是利用覆盖索引. 先说结论,如果一个索引的字段包含了所有要查询的字段,这个索引就称 ...

  3. mysql为什么不用b树_MySQL用B+树(而不是B树)做索引的原因

    众所周知,MySQL的索引使用了B+树的数据结构.那么为什么不用B树呢? 先看一下B树和B+树的区别. 1.B树 维基百科对B树的定义为"在计算机科学中,B树(B-tree)是一种树状数据结 ...

  4. B+树在MySQL索引的应用和InnoDB的索引优化

    B树索引算法介绍 1.B树 B树又称为多路平衡查找树,它类似普通的平衡二叉树,不同的一点是B树允许每个节点有更多的子节点. B树有如下特点: 具有n个关键字的节点含有(n+1)棵子树 所有键值分布在整 ...

  5. MySQL索引分析以及相关面试题

    可以在我的个人博客阅读文章,排版会美观一些:文章地址 1. 什么是索引 一种能帮助mysql提高查询效率的数据结构:索引数据结构 索引优点: 大大提高数据查询速度 索引缺点: 维护索引需要耗费数据库资 ...

  6. MySQL索引深入解析

    索引的出现其实就是为了提高数据查询的效率. 索引的常见数据结构 哈希表 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的键即 key,就可以找到其对应的值即 Valu ...

  7. 《破壁MySQL》 - MySQL索引

    文章每周六持续更新,可以微信搜一搜「 荒古传说 」抢先阅读. 在上一篇文章 「<破壁MySQL> - MySQL概述」 中我们简单介绍了MySQL 架构和 MySQL 存储引擎的相关知识, ...

  8. MySQL索引底层数据结构

    MySQL相信大家都不陌生,索引的日常使用应该也是比较频繁的,今天就聊一聊索引底层的数据结构; MySQL索引底层为什么使用B+树而不是二叉树;红黑树;B树? 索引:索引是帮助MySQL高效获取数据的 ...

  9. 腾讯三面灵魂问题:如何理解MySQL索引底层数据结构

    MySQL 索引相关的数据结构有两种,一种是 B+tree,一种是 Hash,那么为什么在 99.99% 很多情况下都使用的是 B+tree索引呢? 索引的底层数据结构是怎样的呢? 接下来就听小二娓娓 ...

最新文章

  1. 人人都能做游戏!3D次世代CE云端引擎发布
  2. Showdoc 搭建项目 API 文档系统
  3. PP视频怎么设置可以运行多个客户端
  4. 将Tomcat添加进服务启动
  5. 关于在页面跳转前alert()不能弹出消息的问题
  6. 【重难点】【Java基础 04】值传递和引用传递、序列化和反序列化
  7. 大数据到底在用什么姿势塑造我们?
  8. VS(Visual Studio)自动创建的文件格式
  9. 存到mysql的中文乱码_web项目存数据到数据库,中文乱码,解决过程
  10. Win7-64位 Cygwin编译Redis
  11. 关于机器智能,10问达摩院科学家金榕
  12. Threejs初级教程
  13. 自定义填充图案插件 cad_20个超实用天正CAD技巧,效率递增10倍,设计院师傅都在用...
  14. 直方图规定化python+opencv实现
  15. 单片机仿真器和烧写器的区别
  16. 基于CC2430和DS18B20的无线测温系统设计
  17. Pytest全栈自动化测试指南-入门
  18. ie 远程控制计算机,通过IE浏览器连接“远程桌面”方法详解
  19. 华为与android连接方法,华为手机怎样与电脑连接?安卓手机连接电脑的方法介绍...
  20. 混合云管平台排名您知道吗?看这里

热门文章

  1. 智能家居逐渐融入AI技术 向大众市场扩张仍需时间
  2. 【Maven学习笔记(二)】Maven的安装与配置
  3. github果然强大
  4. 关于微信,运营商们就这点志向?
  5. Objective-C学习笔记(一)–类
  6. android Fragments详解一:概述
  7. 第3节 中间层创建与设置
  8. “.NET研究”谈谈C# 4.0新特性“缺省参数”的实现
  9. linux系统管理学习笔记之八---进程与作业的管理
  10. linux 安装redis2.8.3,Linux及Windows安装Redis(详细)