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

一 数据库为什么使用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树读取磁盘过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MDOP套装之app-v安装使用及功能说明

最近尝试了瑞友天翼的虚拟化产品&#xff0c;感觉还不错&#xff0c;正好手上又下载了个mdop套装&#xff0c;顺手做了个app-v实验&#xff0c;其他实验教程后期继续推出。 一、服务端的安装 二、排序工具的安装 三、客户端的安装 四、使用排序工具虚拟化一个程序 五、发布虚…

容器技术之Dockerk8s知识笔记

本文带你快速了解Kubernetes与Docker 让你对容器与虚拟机的区别、Docker与k8s有一个快速的了解 目录 演变史容器与虚拟机的区别K8S与Docker概念DockerK8S演变史 传统部署时代&#xff1a; 早期&#xff0c;将单一的应用服务运行在物理服务器上&#xff0c;无法给服务器的应用…

Container.ItemIndex 获取reapeater行号

<div class"<%# (Container.ItemIndex)4?"class3":"class4"%>"></div>取到第五行的行号&#xff0c;用一个三元运算符来判断div的样式。 图中container.itemindex(container.ItemIndex-5)是不对的&#xff0c;最上面的代码才…

容器技术之快速了解K8S各抽象资源及组件架构

带你快速了解Kubernetes主要概念和组件架构。 Kubernetes的组件和架构比较多&#xff0c;功能也比较多。 如果详细探讨&#xff0c;每个Kubernetes组件都可以单独写篇博客详细讲解。 我们这里是快速了解&#xff0c;就写的相对比较简单一些。 主要是针对不熟悉Kubernetes的…

Python可视化神器之pyecharts

目录 概述安装参数实例 柱状图-Bar饼图-Pie折线图-Line散点图-scatter3D 柱状图-Bar3D仪表盘-Gauge雷达图-Radar词云图-WordCloud地理坐标系-Geo地图-Map概述 Pyecharts是一款将python与echarts结合的强大的数据可视化工具。使用 pyecharts 可以生成独立的网页&#xff0c;也…

腾讯的强大不是偶然,小马哥很强大

为什么80%的码农都做不了架构师&#xff1f;>>> 其实自己对于腾讯没什么好感&#xff0c;不过也没有太多的坏感&#xff0c;之前还有一篇日志&#xff0c;小批评了一下腾讯&#xff0c;今天看到小马哥写给内部员工的反思邮件。记录下两点提醒自己&#xff1a;对待敌…

计算机三级网络技术第一道大题 网络地址 主机号 直接广播地址 网络技术

加粗样式#计算机三级网络技术 ##网络地址&#xff0c;直接广播地址&#xff0c;主机号&#xff0c;子网中第一个可以IP地址&#xff0c;子网中最后一个可用IP地址 这是我在备考计算机三级网络技术中&#xff0c;写的几个例题&#xff0c;有哪里错的&#xff0c;还请大佬们帮忙纠…

SQL Server2008 附加数据库时出错

开机后附加数据库失败&#xff1a; 1.正常操作附加数据库。 右键单击sqlserver中的数据库&#xff0c;选择【附加】左击【添加】,选择文件路径,左击【确定】&#xff0c;之后弹出“附加数据库时出错”&#xff1a;确定&#xff0c;继续下一步进而查看原因&#xff0c;如图&…

j2me 学习资料

为什么80%的码农都做不了架构师&#xff1f;>>> 1:J2ME移动应用开发实战视频教程 http://www.pconline.com.cn/pcedu/videoedu/asp/0809/1425959.html 转载于:https://my.oschina.net/sunyh/blog/10534

VSTO应用程序中加入键盘钩子

在VSTO应用程序中有时为了处理一些快捷按键操作等实现一些特殊的功能&#xff0c;此时需要对键盘进行挂钩&#xff0c;此时使用P/Invoke函数实现&#xff0c;参考如下&#xff1a; VSTO加载和卸载时进行钩子的初始化和卸载 代码 KeyboardHook hook;privatevoidThisAddIn_Startu…

深入理解JavaScript中的this关键字

在JavaScript中this变量是一个令人难以摸清的关键字&#xff0c;this可谓是非常强大&#xff0c;充分了解this的相关知识有助于我们在编写面向对象的JavaScript程序时能够游刃有余。 对于this变量最要的是能够理清this所引用的对象到底是哪一个&#xff0c;也许很多资料上都有自…

NET中使用Identity+CodeFirst+Jwt实现登录、鉴权

目录 前言 一、创建上下文类 1.自定义MyContext上下文类继承IdentityDbContext 2.在Program中添加AddDbContext服务 二、使用Migration数据迁移 1.在控制台中 依次使用add-migration 、updatebase 命令 2.如何修改表名 3.如何自定义字段 三、使用Identity实现登录、修改密码 …

LYNC解决方案巡展

今天有幸参加了微软的LYNC解决方案巡展&#xff0c;也捕捉到一些镜头。和大家分享一下。 酒店入口的易拉宝。这个酒店的海鲜自助不错&#xff0c;可惜不是旋转餐厅。 微软中国及大中华区信息工作者业务群峰鹰巩的演讲。不过是纯英文的&#xff0c;没有翻译。我觉得微软在这些方…

巨额流量费其实可以避免

巨额流量费其实可以避免<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />“史上最贵微博”一度被人们热议。说是运营商的错&#xff0c;而运营商也很无奈&#xff0c;本来这种事情就非运营商所能掌控的。其实天价流量看似可怕其实…

渗透测试岗位面试题(重点:渗透测试思路)

转载自公众号&#xff1a;alisrc 本文主要是讲解遇到问题的各思路解决方法&#xff0c;不仅可做为面试题查看&#xff0c;在实操中收到思绪的阻碍也可作为参考. 1、拿到一个待检测的站&#xff0c;你觉得应该先做什么&#xff1f;1)信息收集1&#xff0c;获取域名的whois信息,获…

使用Symantec Altiris 来监控 Dell 服务器 的 硬件

最近一直在折腾DMC 监控 Dell 服务器&#xff0c; Altiris 6 对Dell的监控策略会丰富很多 &#xff0c;到了 7 严重缩水&#xff0c;6的策略又不能转化成7 ~~比较郁闷~~ 唯有自己去写不过最算给我写完了大部分常用的~~ 主要是 电源、电压、风扇、温度、处理器、内存、电池 等等…

AD+DNS安装步骤详解

一.安装ADDNS准备工作&#xff08;虚拟机使用VPC&#xff09; 1.准备一台纯净版的Windows Server2003&#xff0c;并且设置只有一块网卡其属性为Local only。 2.配置网卡IP地址&#xff0c;一定要设置DNS服务器地址。若是第一台域控制器&#xff08;AD&#xff09;&#xff0c;…

第一个Android工程HelloAndroid

2019独角兽企业重金招聘Python工程师标准>>> 从这一节我们将正式进入Android编程世界,希望大家多多给我留言以及提些建议.首先我们打开Eclipse选择左上方的菜单[File->New->Project->Android Project]双击后会出现新建Android工程对话框,如下图所示:如果你…

IP地址 子网掩码 网关

A类、B类、C类IP地址区别 IP地址&#xff08;其实这个是IPV4&#xff09;是一个32位的二进制数&#xff0c;由四个八位字段组成。每个IP地址包括两部分&#xff1a;一部分为网络标识&#xff0c;一部分为主机标识。 A类地址前8位为网络标识。后24位为主机标识 B类地址前16位为网…

用FileZilla Server搭建ftp服务器

用FileZilla Server搭建ftp服务器 1.先在浏览器搜索 filezilla server 2.点开FileZilla软件的官网&#xff0c;下载该软件 3.下载完成后&#xff0c;按照操作流程一步步完成安装 4.打开filezilla Server软件&#xff0c;运行该软件&#xff0c;使FTP Server运行起来 5.…