首先,mysql的基本存储结构是页:


各个数据页可以组成一个双向链表,每个数据页中的记录又可以组成一个单向链表。
如要查询:select * from user where name=‘xxx’;
在没有索引时,查询数据需要先遍历双向链表找到所在的页,如果不是根据主键查询,只能再在所在的页遍历单向链表了。
使用索引之后的存储结构边得有序了:(现在根据二分查找,很快就能找到,时间复杂度近似O(logn))

InnoDB存储引擎最小存储单元是页,一个页的大小是16K。页可以存放数据页可以存放键值+指针,在B+ 树叶子节点存放数据,非叶子节点存放键值+指针。所以组织表通过非叶子节点的二分查找法以及指针确定在哪个页中,进而去数据页中查找需要的数据。

为什么选择B+树而不选择二叉树,B树?
算法中有一个二分法查询效率是比较高的,二分法在数据结构中有一种数据结构二叉树实现原理就是二分法,但是二叉树有一个不好的点就是当数据是依次增大或依次减小的时候就会形成一个链表,因此有了红黑树通过左旋和右旋进行平衡,但是还有缺陷就是树太高了,在查找数据时一次页的查找代表一次IO,树太高查询一个数据的IO次数就会很高。因此有了B树,虽然相对红黑树有改进,但是每个节点都存储有数据,由于CPU每次读取数据库的大小是一定的,所以耗费的性能也是比较高的。所以每次IO的数据更多一些,把数据读取到内存中,再进行排序花费的时间就小了,因此,B+ 树的磁盘页可以存储更多的节点元素。

B+树相比于B树的优点:
1、B+树的中间节点不存储元素,是纯索引,B树的中间节点存储元素,相比于B树来说,树更矮(意味着IO次数越少)。
2、B+数查询必须查找到叶子节点,B树只要找到节点就能找到数据。
3、对于范围查找来说,B+ 树只需要遍历叶子节点即可,而B树则要不断的进行中序遍历(在项目中范围查找也很常见)。
4、增删节点时,B+树效率更高,因为B+树的叶子节点包含所有的关键字,并以有序的链表结构存储,可以很好的提高增删效率。

参考资料:https://blog.csdn.net/a314774167/article/details/88111713

mysql为什么使用B+树作为索引结构?相关推荐

  1. mysql b 树原因_复习系列之数据库(四):MySQL为什么采用B+树作为索引结构?

    MySQL中数据是索引组织表,即表中数据按照主键顺序存放.所以就可以基于索引这种数据结构实现一些高级算法,来提高检索效率. 常见的查找算法 顺序查找:复杂度O(n),在数据量大时,效率很低 二分查找: ...

  2. MySQL - 为什么使用B+树做索引结构

    一.简介 官方:索引是帮助MySQL高效获取数据的排好序的数据结构 二.数据结构实现方式 二叉树 红黑树 Hash表 B-Tree 三.b+树结构详解 MySQL底层索引用的并不是完全的b树,而是在b ...

  3. 为什么Mysql底层采用B+树做索引?

    问题   在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构.MySQL为什么选择B+树作为索引结构,而不是二叉树.红黑树什么的呢? 一.二叉查找树(BST):不平衡   二 ...

  4. mysql为什么使用b 树作为索引_为什么Mysql用B+树作为索引

    该篇文章已经投稿给公众号hollis 1.什么是索引 索引这个词,相信大多数人已经相当熟悉了.不过为了文章的完整性,这里再啰嗦一下.索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的 ...

  5. 深入理解MySQL(2):详谈索引结构

    MySQL 四.索引 4.1索引简介 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,所以说索引的本质是:数据结构 索引的目的在于提高查询效率,可以类比字典. ...

  6. MySQL为什么使用B+树作为索引? 索引原理?

    目录 一.Mysql索引主要有两种结构:B+Tree索引和Hash索引 什么是索引 为什么要使用索引 举例说明使用索引的好处 数据库中使用什么数据结构作为索引 各种树的名字 平衡二叉树 为什么平衡二叉 ...

  7. mysql 联合索 B 树_MySQL 索引与 B+ 树

    MySQL 索引与 B+ 树 B+ 树 MySQL Innodb 存储引擎是使用 B+ 树来组织索引的.在介绍 B+ 树以前,先认识一下什么是 B 树,B 树是平衡二叉树,与一般的二叉查找树不同,平衡 ...

  8. mysql为什么用B 树做索引_mysql为什么用b+树做索引

    关键字就是key的意思 一.B-Tree的性质 1.定义任意非叶子结点最多只有M个儿子,且M>2: 2.根结点的儿子数为[2, M]: 3.除根结点以外的非叶子结点的儿子数为[M/2, M]: ...

  9. 【mysql innodb索引结构B+树】

    [mysql innodb索引结构B+树] 为什么Mysql中Innodb的索引结构采取B+树? B树 B树的两个明显特点 树内的每个节点都存储数据 叶子节点之间无指针相邻 B+树 B+树的两个明显特 ...

最新文章

  1. 国内首档程序员真人秀?这不比博人传热血?!
  2. Java开源Web Service(转)
  3. 人生中五个遗憾,共勉
  4. linux命令gcc常用选项
  5. 安装Ubunutu音频视频库
  6. django简介及环境搭建
  7. 最有用的Postgres扩展:pg_stat_statements
  8. 算法移植优化(三)android dlib 人脸检测使用
  9. Hive近百个常规函数详解
  10. 裁员、卖手机、押注VR,HTC能否王者归来?
  11. 如何彻底杀掉nginx进程
  12. android对话框合集AlertDialog
  13. 模板函数:将string类型变量转换为常用的数值类型和常用的数值类型转String
  14. require和include的区别(PHP)
  15. linux常用命令(3)——系统管理1
  16. 三星 GT-I9118拆机换外屏教程
  17. matlab2009安装教程
  18. 【Java】Java速成
  19. 【上汽零束SOA】云管端一体化SOA软件平台系列介绍之二:数字架构篇
  20. matlab ols regress,计量经济学简单线性回归OLS的Matlab程序.pdf

热门文章

  1. hal库 spi--bl0942调试
  2. Python Qt 一个案例
  3. Flash整站项目Gaia框架总结(1)AS3部分
  4. 基于单片机的智能太阳能手机充电器的设计与实现
  5. mysql 脚本超时 导入_BigDump -解决PHPmyadmin导入超大 MySQL 数据库备份文件脚本超时...
  6. 基于ROS机器人的3D物体识别与三维重建(三)基于ROS的3D物体识别
  7. Discuz论坛搭建
  8. AI诊疗里程碑突破!Nature子刊:全新AI诊断工具问世,准确度或超年轻医生
  9. html里换行用什么标签,html换行标签是什么?
  10. 信安软考——第六章 认证技术原理和应用 笔记记录