为什么MySQL InnoDB 存储引擎 要用B+树做索引,而不用B树?

(1)B+树空间利用率更高,可减少I/O次数

一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗。而因为B+树的内部节点只是作为索引使用,而不像B树那样每个节点都需要存储硬盘指针。也就是说:B+树中每个非叶节点没有指向某个关键字具体信息的指针,所以每一个节点可以存放更多的关键字数量,即一次性读入内存所需要查找的关键字也就越多,减少了I/O操作。

e.g.

假设磁盘中的一个盘块容纳16bytes,而一个关键字2bytes,一个关键字具体信息指针2bytes。一棵9阶B-tree(一个结点最多8个关键字)的内 部结点需要2个盘快。而B+ 树内部结点只需要1个盘快。当需要把内部结点读入内存中的时候,B 树就比B+ 树多一次盘块查找时间(在磁盘中是盘片旋转的时间)。

(2)增删文件(节点)时,效率更高

因为B+树的叶子节点包含所有关键字,并以有序的链表结构存储,这样可很好提高增删效率,基于范围查询更好。

(3)B+树的查询效率更加稳定

因为B+树的每次查询过程中,都需要遍历从根节点到叶子节点的某条路径。所有关键字的查询路径长度相同,导致每一次查询的效率相当。

关于B 树与 B+树

B树

每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为null。

B+树

只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针。

后来又在B+树上增加了顺序访问指针,也就是每个叶子节点增加一个指向相邻叶子节点的指针,这样一棵树成了数据库系统实现索引的首选数据结构。

小结:B树和B+树的区别

1)B树的每个结点都存储了key和data,B+树的data存储在叶子节点上。

节点不存储data,这样一个节点就可以存储更多的key。可以使得树更矮,所以IO操作次数更少。

2)树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录

由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。

树高度越小,I/O次数越少。 为什么是B+树而不是B树呢,因为它内节点不存储data,这样一个节点就可以存储更多的key。

MyISAM和InnoDB存储引擎

在MySQL中,最常用的两个存储引擎是MyISAM和InnoDB,它们对索引的实现方式是不同的。

MyISAM

data存的是数据地址。索引是索引,数据是数据。索引放在XX.MYI文件中,数据放在XX.MYD文件中,所以也叫非聚集索引。

InnoDB引擎

data存的是数据本身。索引也是数据。数据和索引存在一个XX.IDB文件中,所以也叫聚集索引。

区别

了解了数据结构再看索引,一切都不费解了,只是顺着逻辑推而已。另加两种存储引擎的区别:

1、MyISAM是非事务安全的,而InnoDB是事务安全的

2、MyISAM锁的粒度是表级的,而InnoDB支持行级锁

3、MyISAM支持全文类型索引,而InnoDB不支持全文索引

4、MyISAM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyISAM

5、MyISAM表保存成文件形式,跨平台使用更加方便

6、MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,如果在应用中执行大量select操作可选择

7、InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,可选择。


http://www.taodudu.cc/news/show-4330484.html

相关文章:

  • 前方高能,这个语音转文字转换器超实用
  • 实用的语音转文字转换器,告别文件转换难题
  • 语音转文字转换器怎么用,免费的语音转文字方法介绍
  • 如何把语音转文字转换
  • android文字转语音文件格式,Android文字转语音
  • 一招教会你语音转文字转换器怎么使用
  • 让你的工作事半功倍的语音转文字转换器
  • 语音转换文字工具,怎么将语音转换成文字
  • 在VS 2019中使用HDF5的C API遍历HDF5数据集
  • HDF5数据库和mysql数据库_hdf5文件格式使用攻略
  • C++ 读取 HDF5
  • html显示hdf5文件,图片转换成HDF5文件(加载,保存)
  • python hdf5_使用Python将大量数字写入HDF5文件
  • hdf5 python_HDF5 文件及Python模块之h5py
  • HDF5 学习总结1
  • python hdf5_安装HDF5 1.8 和H5PY--HDF5和python接口
  • matlab hdf5,无法使用最新的HDF5打开matlab文件
  • [HDF5] HDF5安装,编译及使用中的各种问题解决方法(Windows)
  • matlab查看hdf5数据,Matlab 操作 HDF5文件
  • group python 读hdf5_HDF5 文件及 h5py
  • hdf5-java_Java HDF5LibraryException類代碼示例
  • HDF5 windows编译 release版本、Debug版本
  • hdf5 matlab,hdf5格式的matlab读写操作
  • hdf5 的使用
  • HDF5-基础入门
  • [HDF5]如何使用CMake一起编译自己的代码和HDF5库
  • [HDF5] 封装了一个简单的C++ HDF5工具库,实现常用数据类型的读写
  • HDF5知识总结
  • python hdf5_Python HDF5属性
  • hdf5 目录没有serial_hdf5

为什么MySQL InnoDB 存储引擎要用B+树做索引,而不用B树?相关推荐

  1. 浅析Mysql InnoDB存储引擎事务原理

    浅析Mysql InnoDB存储引擎事务原理 大神:http://blog.csdn.net/tangkund3218/article/details/47904021

  2. 数据结构与索引-- mysql InnoDB存储引擎索引

    索引与算法 索引是我们在应用开发过程中程序数据可开发的一个重要助力.也是一个重要的研究方向,索引太多,应用的性能可能受到影响,如果索引太少,对查询性能又会有制约.我们需要找到一个合适的平衡点,这个对性 ...

  3. MySQL Innodb存储引擎使用B+树做索引的优点

    对于数据库来说,索引和表数据都是存放在磁盘上的,一般使用B+树作为索引 MySQL Innodb存储引擎使用了B+树作为索引的优点,主要有以下原因: 1.索引和表数据都是存放在磁盘上的,如果磁盘上的数 ...

  4. MySQL InnoDB 存储引擎索引那些事儿

    InnoDB 存储引擎中,表是根据主键顺序组织存放的,称为索引组织表.每个表都有一个主键,如果没有显示定义主键,则会选择第一个创建的非空唯一索引作为主键,如果没有非空唯一索引,InnoDB引擎则自动创 ...

  5. mysql InnoDB存储引擎的介绍

    mysql InnoDB存储引擎的介绍 概念 1.InnoDB是MySQL默认的存储引擎,如果需要其不支持的特性,则考虑使用其他存储发动机. 2.InnoDB采用MVCC支持高并发,实现四个标准隔离级 ...

  6. MySQL数据库的红黑树优化_为什么Mysql用B+树做索引而不用B-树或红黑树

    B+树做索引而不用B-树 那么Mysql如何衡量查询效率呢?– 磁盘IO次数. 一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上. ...

  7. MySQL InnoDB存储引擎

    呵呵哒... MySQL体系结构和存储引擎 首先要搞懂的是什么是数据库,什么是数据库实例. 数据库:物理操作系统文件或其他形式文件类型的集合. 实例:MySQL数据库由后台线程以及一个共享内存区组成, ...

  8. MySQL InnoDB 存储引擎文件

    InnoDB 存储引擎文件,为该存储引擎独有,包括表空间文件和重做日志文件. 1.表空间文件 InnoDB存储引擎的数据按照表空间进行存放,默认配置下有一个初始大小和默认名的文件,通过以下命令查看: ...

  9. 谈谈MySQL InnoDB存储引擎事务的ACID特性

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 狼哥一直对数据库Mysql这块没有进行过系统的深入学习,今天看到一篇文章写的还不错,特意分享一下,我不能保证文章中所 ...

最新文章

  1. hadoop在Browse Directory中文件下载不了
  2. 分布式缓存的面试题8
  3. 判断resultset是否遍历到最后一条记录_干货:一条SQL语句执行得很慢的原因
  4. MQTT与函数计算做热力图实践
  5. oracle数据库的医院信息系统数据库升级方案,医院信息系统数据库从Oracle8i到10gR2升级的实现...
  6. 求二叉树节点个数、叶子节点、节点层次与宽度
  7. 蛋糕连锁店网站管理系统v1.5.1-企业建站系统源码
  8. Mysql学习总结(17)——MySQL数据库表设计优化
  9. java语音读字符串_Android Java文本到语音查看额外的字符串信息
  10. 帝都搬砖四年,我决定回老家考公务员
  11. 【消费量预测】基于matlab碳排放约束下煤炭消费量预测【含Matlab源码 223期】
  12. IIS的ISAPI接口简介
  13. 深度学习开源数据集整理
  14. 如何理解面向对象(POO)?
  15. Office Word中由于自定义了新的样式名称,而导致题注显示:错误!文档中没有指定的样式文字
  16. Python中print换行问题
  17. python里两个等号代表什么_Python 到底是强类型语言,还是弱类型语言?
  18. 程序员10大境界【走在路上,潜心修行】
  19. 2022-2028年中国物流地产行业市场发展潜力及投资风险预测报告
  20. wan端口未连接怎么弄_wan口,小编教你wan口未连接该怎么办

热门文章

  1. linux搭建raid5命令,命令行操作RAID5
  2. 计算机毕业设计-基于微信小程序高校学生课堂扫码考勤签到系统-校园考勤打卡签到小程序
  3. 网页集成大华摄像头以及回放功能2019.11.14
  4. 边框检测原理与Tensorflow代码
  5. 《老梁四大名著情商课》笔记- 别慌,情商是可以提升的
  6. ros android 方案,ROS + Android
  7. [bzoj4094]Optimal Milking
  8. 图解CPU生产全过程——以intel CORE i7为例,展望CPU架构
  9. Chrome图片批量下载扩展-zzllrr imager V1.4
  10. 计算机远程桌面软件,手把手教你远程控制电脑软件推荐