B+树的创建(索引的创建)
1.比如为phoneNum创建了一个索引,phoneNum这列保存了很多的手机号码
2.索引创建的过程中,会为这些数据进行适当的编码(根据这个数据所在的物理地址),如 3670 可能编成 66 这个号码
3.然后根据所有编成的号码,创建一些对比值,这些对比值实际上是不存在的,
4.将这些对比值作为根和支,编成的号码作为叶子,这些叶子节点都是一个一个的引用,指向了实际数据的物理地址
构成一颗多路径的树,可以是二叉,也可以是三、四叉
注:在和对比值比较的过程中,最后叶子节点的排列也是按照一定顺序的,如比它小,就排在左边,小就排在右边,所以索引是一种排好序的数据结构
5.将这棵树,以文件的方式存储在磁盘中

B+树的使用(索引的使用)
1.当使用的 sql语句用到了phoneNum时,这颗B树被加载到了内存中,此时我的查询条件比如说是 3670,
2.会使用 3670 对应的 编成的号码66,去查询这棵树,这样一层一层查下去,最终拿到66
3.拿到66之后,再去取出 3670
(66 这是一个引用,指向了 3670 对应的物理地址,)

树的高度决定了 io操作的次数,三层就会进行三次io操作,从磁盘中去读数据

  

B树和B+树区别:B+树是B树的一种变种
  1.B树中同一键值不会出现多次,并且它有可能出现在叶结点,也有可能出现在非叶结点中。
     而B+树的键一定会出现在叶结点中,并且有可能在非叶结点中也有可能重复出现,以维持B+树的平衡。
  2.因为B树键位置不定,且在整个树结构中只出现一次,虽然可以节省存储空间,
     但使得在插入、删除操作复杂度明显增加。B+树相比来说是一种较好的折中。
  3.B树的查询效率与键在树中的位置有关,最大时间复杂度与B+树相同(在叶结点的时候),
     最小时间复杂度为1(在根结点的时候)。而B+树的时候复杂度对某建成的树是固定的

事实上,在MySQL数据库中,诸多存储引擎使用的是B+树,即便其名字看上去是BTREE。Innodb和 Myisam 都是使用B+树来创建索引

6.B+Tree 检索原理的更多相关文章

  1. K-D TREE算法原理及实现

    博客转载自:https://leileiluoluo.com/posts/kdtree-algorithm-and-implementation.html k-d tree即k-dimensional ...

  2. MYSQL之B+TREE索引原理

    1.什么是索引? 索引:加速查询的数据结构. 2.索引常见数据结构 顺序查找: 最基本的查询算法-复杂度O(n),大数据量此算法效率糟糕. 二叉树查找:(binary tree search): O( ...

  3. FP Tree算法原理总结(转载)

    FP Tree算法原理总结 在Apriori算法原理总结中,我们对Apriori算法的原理做了总结.作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题 ...

  4. FP Tree算法原理总结

    在Apriori算法原理总结中,我们对Apriori算法的原理做了总结.作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题,FP Tree算法(也称F ...

  5. 3.3 Lucene检索原理

    Lucene是一个高效的,基于Java的全文检索库[1].所以在介绍Lucene的检索功能之前,我们要先了解一下全文检索以及Lucene的索引结构. 一.全文检索的基本原理 1. 数据的分类 什么是全 ...

  6. Influxdb原理详解

    本文属于<InfluxDB系列教程>文章系列,该系列共包括以下 15 部分: InfluxDB学习之InfluxDB的安装和简介 InfluxDB学习之InfluxDB的基本概念 Infl ...

  7. 数据库MySQL 之 索引原理与慢查询优化

    数据库MySQL 之 索引原理与慢查询优化 浏览目录 索引介绍方法类型 聚合索引辅助索引 测试索引 正确使用索引 组合索引 注意事项 查询计划 慢查询日志 大数据量分页优化 一.索引介绍方法类型 1. ...

  8. Merkle Tree 概念

    Merkle Tree 概念 来源 https://www.cnblogs.com/fengzhiwu/p/5524324.html /*最近在看Ethereum,其中一个重要的概念是Merkle T ...

  9. Mysql的实现原理

    上篇文章已经简单介绍了Mysql索引的基本介绍,这篇文章主要讲解一下所以的实现原理.索引的定义其实非常复杂,严格的定义需要用到关系代数的概念,不在咱们讨论范围内,这里咱们只讨论mysql的常用的引擎的 ...

随机推荐

  1. java dom4j 解析xml使用实践

    参考:https://dom4j.github.io/ http://www.cnblogs.com/liuling/archive/2013/02/05/dom4jxml.html 常用api: 1 ...

  2. for-update与for-update nowait

    1.for update 和 for update nowait 的区别: 首先一点,如果只是select 的话,Oracle是不会加任何锁的,也就是Oracle对 select 读到的数据不会有任何 ...

  3. [maven]scope之test

    <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit ...

  4. Java中遍历Map的四种方式

    Demo如下 Map<String, String> map = new HashMap<>(); map.put("key1","data1&q ...

  5. 【ARTS】01_28_左耳听风-201900520~201900526

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. Flutter 底部导航栏bottomNavigationBar

    实现一个底部导航栏,包含3到4个功能标签,点击对应的导航标签可以切换到对应的页面内容,并且页面抬头显示的内容也会跟着改变. 实际上由于手机屏幕大小的限制,底部导航栏的功能标签一般在3到5个左右,如果太 ...

  7. tomcat-APR配置及三种工作模式简介

    安装软件包,之前可以用rpm -q 命令查看一下是否存在,如果有这两个软件包先卸载再重新安装yum -y install apr apr-devel 拷贝Tomcat安装目录下的bin目录下的tomc ...

  8. Volatility取证使用笔记

    最近简单的了解了一下Volatility这个开源的取证框架,这个框架能够对导出的内存镜像镜像分析,能过通过获取内核的数据结构,使用插件获取内存的详细情况和运行状态,同时可以直接dump系统文件,屏幕截 ...

  9. 如何创建spring web 工程(maven工程)

    1.在项目资源管理器右键,New-Spring Starter Project 2.设置一些参数 3.点击Next,然后勾选两个选项 4.点击finish

  10. 一文带你了解babel-preset-env

    参考链接:https://www.jianshu.com/p/000c2670672b