http://www.cnblogs.com/tgycoder/p/5410057.html
B-树
B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树 它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图.
B-树有如下特点:
-
所有键值分布在整颗树中;
-
任何一个关键字出现且只出现在一个结点中;
-
搜索有可能在非叶子结点结束;
-
在关键字全集内做一次查找,性能逼近二分查找;
B+ 树
B+树是B-树的变体,也是一种多路搜索树, 它与 B- 树的不同之处在于:
-
所有关键字存储在叶子节点出现,内部节点(非叶子节点并不存储真正的 data)
-
为所有叶子结点增加了一个链指针
简化 B+树 如下图
为什么使用B-/B+ Tree
红黑树等数据结构也可以用来实现索引,但是文件系统及数据库系统普遍采用B-/+Tree作为索引结构。MySQL 是基于磁盘的数据库系统,索引往往以索引文件的形式存储的磁盘上,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。为什么使用B-/+Tree,还跟磁盘存取原理有关。
局部性原理与磁盘预读
由于磁盘的存取速度与内存之间鸿沟,为了提高效率,要尽量减少磁盘I/O.磁盘往往不是严格按需读取,而是每次都会预读,磁盘读取完需要的数据,会顺序向后读一定长度的数据放入内存。而这样做的理论依据是计算机科学中著名的局部性原理:
当一个数据被用到时,其附近的数据也通常会马上被使用
程序运行期间所需要的数据通常比较集中
由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间),因此对于具有局部性的程序来说,预读可以提高I/O效率.预读的长度一般为页(page)的整倍数。
MySQL(默认使用InnoDB引擎),将记录按照页的方式进行管理,每页大小默认为16K(这个值可以修改).linux 默认页大小为4K
B-/+Tree索引的性能分析
实际实现B-Tree还需要使用如下技巧:
每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个结点只需一次I/O。
假设 B-Tree 的高度为 h,B-Tree中一次检索最多需要h-1次I/O(根节点常驻内存),渐进复杂度为O(h)=O(logdN)O(h)=O(logdN)。一般实际应用中,出度d是非常大的数字,通常超过100,因此h非常小(通常不超过3)。
而红黑树这种结构,h明显要深的多。由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性,所以红黑树的I/O渐进复杂度也为O(h),效率明显比B-Tree差很多。
为什么使用 B+树
-
B+树更适合外部存储,由于内节点无 data 域,一个结点可以存储更多的内结点,每个节点能索引的范围更大更精确,也意味着 B+树单次磁盘IO的信息量大于B-树,I/O效率更高。
-
Mysql是一种关系型数据库,区间访问是常见的一种情况,B+树叶节点增加的链指针,加强了区间访问性,可使用在范围区间查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找。
我的博客: http://ygmyth.github.io
参考文献
[1] 姜承尧 著;MySQL技术内幕-InnoDB存储引擎;机械工业出版社,2013
[2] MySQL索引背后的数据结构及算法原理 http://blog.codinglabs.org/articles/theo...
[3] 从 MongoDB 及 Mysql 谈B/B+树 http://blog.csdn.net/wwh578867817/articl...
相关推荐
85.书籍借阅系统|基于 JSP技术+ Mysql+B/S结构+JAVA+HTML+Navicat 设计与实现(非开源可运行源码+数据库+lw)毕业设计管理系统计算机软件工程大数据专业 可运行源码(含数据库脚本)+开发文档+lw(高分毕设项目) ...
本系统作为vue3初学者的入门系统,通过开发经典的《图书管理系统》模拟项目,使vue3的初学者快速掌握从无到有的搭建一套vue3+element-plus前端+spring boot后端+mysql数据库的前后端分离的现代主流项目架构。...
+----+-------------+-------+-------------+----------------------------+----------------------------+---------+------+------+------------------------------------------------------+ | id | select_type...
流行框架:SpringMvc+Spring+mybatis+maven 数据库:mysql web框架:bootstrap,My97DatePickers 定时器任务:job 事务管理:mysql事务处理
6.大学生兼职信息系统|基于SSM 框架+vue+ Mysql+Java+B/S架构技术(lw+PPT) 本文以Java为开发技术,实现了一个大学生兼职信息系统。大学生兼职信息系统的主要实现功能包括:管理员:首页、个人中心、学生管理、学生...
具体在系统设计上,采用了B/S的结构,同时,也使用Java技术在动态页面上进行了设计,后台上采用Mysql数据库,是一个非常优秀的大学生兼职跟踪系统。 关键词 :大学生兼职跟踪系统;Java技术;Mysql数据库;B/S结构
最近读了spring-boot开发手册,spring-boot相比于spring-mvc封装了很多常用的依赖,并且内置了tomcat容器,启动生成的jar包即可启动项目,也是目前流行...本文主要用到了spring-boot,以及mybatis,数据库用到了mysql。
python-diango-web 是【有来开源组织】 基于 Python + Django + MySQL实现的Python Web版学生增删改查,旨在快速入门Python Web开发。 项目仓库地址:https://gitee.com/youlaiorg/python-diango-web 项目文档地址:...
具体在系统设计上,采用了B/S的结构,同时,也使用Java技术在动态页面上进行了设计,后台上采用Mysql数据库,是一个非常优秀的大学生兼职信息系统。 关键词 :大学生兼职信息系统;Java技术;Mysql数据库;B/S结构 ...
大学生企业推荐系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和学生、企业三部分,管理员主要功能包括:首页、个人中心、学生管理、企业管理、招聘信息管理、个人简历管理、应聘职位...
本篇文章将探讨MySQL数据库索引的实现方式,特别是B+树这一数据结构。 首先,明确问题定义是解决问题的基础。对于数据库索引,我们需要考虑的主要功能需求是快速查询单个数据和按区间查找数据。同时,性能方面的...
17.基于vue的MOBA类游戏攻略分享平台的设计与实现|Springboot+Vue+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)游戏大全小游戏推荐游戏攻略公告留言板新闻 详细介绍链接:http://t.csdnimg.cn/FOih9 内容...
+-------------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) · 6、 往表中加入记录 我们先用SELECT命令来查看表中的数据: mysql> select * from mytable; Empty set (0.00 sec...
首先,我们从二叉查找树(Binary Search Tree,BST)开始,逐步说明各种树解决的问题以及面临的新问题,从而解释 MySQL 为什么选择 B+ 树作为索引结构。 二叉查找树(BST) 二叉查找树是一种常见的选择,因为它...
- **数据库索引**:B+树常被用作数据库的索引结构,如MySQL的InnoDB存储引擎。 - **文件系统**:在文件系统中,B+树可以用于文件的快速定位和检索。 - **缓存系统**:在分布式缓存系统如Redis中,B+树也有所应用...
MySQL-python-1.2.4b4.win32-py2.7.exe numpy-1.8.1-win32-superpack-python2.7.exe pyparsing-2.0.2.win32-py2.7.exe python-dateutil-2.2.win32-py2.7.exe six-1.7.3.win32-py2.7.exe PyScripter-v2.5.3-...
3.留守儿童爱心网站设计与实现|SpringBoot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档) 内容概要: 采用了B/S结构,JAVA作为开发语言,数据库采用了B/S结构,Mysql数据库进行开发。该系统包括前台操作,后台...
综上所述,B+ Tree 作为一种高效的索引结构,在数据库系统中扮演着至关重要的角色。通过对 B+ Tree 的原理及其在 MySQL 中的应用进行深入理解,可以更好地利用索引来优化查询性能,提高系统的整体效率。
25.超市管理系统|基于JSP技术+ Mysql+Java+ B/S结构的超市管理系统设计与实现(可运行源码+数据库+设计文档) 以JSP为开发技术,实现了一个超市管理系统。超市管理系统的主要使用者分为管理员;个人中心、员工管理、...