数据结构其实分2大部分:

存储结构:数据根据什么规则存储,比如索引存储的时候要根据树的规则去存储。

逻辑结构:数据本身的结构,比如索引内部其实是一个复合结构,内部除了自己指向的数据地址还有其他节点相关地址。

起初根据查找效率的需求,设计人员选择了单独开辟扇区用来存放索引,就好像字典的索引一个道理。

存储结构和逻辑结构结合起来就帮助我们查找数据的时候可以尽量减少查找次数(底层就是扇区的读取次数)

二叉树的结构也可以帮我们形象理解索引的查找次数与普通链表的差别,同样的数据,普通链表最糟糕情况要查遍所有数据节点,而二叉树最多的查询次数跟树的层数有关,明显比链表要少。

平衡二叉树是在二叉树基础上的进一步优化,用“平衡”形象的表述了怎样优化二叉树的结构,从而优化查询效率。简单说就是父节点要求2边子节点层级要尽量一样,最大高度差为1。

平衡二叉树的结构概念上很好,但是有个问题,索引结构的改变导致磁盘上的索引数据也需要频繁读写调整扇区,这也导致了性能问题。

针对以上问题,设计人员又做了调整:

首先取消单独开辟单独block存放索引,让数据block节点本身就带索引信息,数据block节点本身就是索引节点。

每个block内存储的数据还是顺序排列,能排多少个跟数据本身占用的空间有关。

一个节点能延伸多少个引用关系跟内部的数据有关,而不是二叉树那样的顶多2条线路,大致就是2个端点会各自延伸出一条线路,block内部数据之间如果还能再插入数据,那随着新block的申请,就会延伸出一个新的线路指向新的block。

block内的数据并不是插入就不会再移动的,而是随着block被填满,再插入数据的时候会先发生分裂(block内数+新填入数据序列均分)成2个block(新申请一块,再平分填入2个block),然后选一个靠中间的数据(通常是较大的那个)升级到父节点(这里又是一个block读写),并且调整引用线路,如果父节点也填满了,则在这一层也发生分裂并且有一个数据提升到上一级父节点。

以上结构就是btree(多路查找树)。

btree操作的特点:

1)每次分裂都会使block留有一些空隙供下一次插入。

2)与二叉树不同,btree的延伸是从下到上的。

btree优点:

1)每次调整都是局部的block读写,相比二叉树效率要好一些。

2)相比二叉树,btree的层级要更少,查询效率要更高(block读取次数)

btree的缺陷:

因为btree的节点内存放的是数据,因此实际每个block能分出的线路是有限的。因此,设计人员又提出了b+tree。

b+tree:

b+tree的遍历和分裂逻辑与btree一样,最大的变化有2点:

1)叶子节点只是数据,非叶子节点只存放索引,索引点只保留数据的引用即可。这样放大了索引查找的效率,又不会像二叉树那样多的读写block。查找流程上,b+tree相当于在btree基础上,多了一次查找索引指向的数据所在block。

2)叶子节点的数据是一个顺序排列的链表,这样可以方便按范围查找。

mysql数据结构参考书籍_mysql数据结构相关相关推荐

  1. mysql二次写_Mysql系列相关面试题(汇总版)

    mysql相关的面试题我觉得核心的没几个,但是为了应对各种问题,所以感觉还是稍微全面一点比较好. 在百家号上有人说我的这些题目都见过,是抄来的,在这里再说一次,面试题只要不是单篇的某个知识点,全是我在 ...

  2. mysql日志的作用_MySQL 日志相关知识总结

    数据库中用于存储数据的文件称为data file,日志文件称为log file.此外,如果每次读写都是直接访问磁盘,性能很差,所以数据库是有缓存的,数据缓存是data buffer,日志缓存log b ...

  3. mysql无关子查询_mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决...

    ※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样) SHOW VARIABLES; //查看系统变量 //查询字符编码相关的系统变量 SHOW VARIABLES WHERE ...

  4. mysql主从有关参数_MySQL 主从复制相关参数

    列举了MySQL主从复制主要的相关参数 binlog server_id 服务器在集群中唯一标识符 log_bin[=binlog_name] 启动二进制日志 log_bin_index 二进制日志索 ...

  5. 讲mysql执行流程书籍_MySQL 基础架构 1. 一条SQL查询语句的执行过程(个人学习笔记)...

    MySQL的逻辑架构图: MySQL 大体分为 "server 层" 和 "存储引擎层" 两部分: Server 层 包括 连接器.查询缓存.分析器.优化器.执 ...

  6. mysql sql优化书籍_MySQL SQL优化的正确姿势

    大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 已经很久没写文章了 今天分享一篇优化SQL 案例 slow query 里有如下 SQL 看下执行计划如下 从执行计划可以看出C表全表扫描了 那 ...

  7. 数据结构关键路径_2021年厦门大学考研丨能源学院845数据结构参考书目推荐

    复习全书+模拟题配合解析班效果更妙 为了帮助大家能够快速找到自己报考专业的复习资料,小夏为此帮大家整理了各个专业专业课的参考书目,分享如下: 845数据结构内容范围845数据结构课程考试内容范围:在考 ...

  8. 面试必问:一文弄懂MySQL数据库索引之底层数据结构和索引类型

    面试必问:一文弄懂MySQL数据库索引之底层数据结构和索引类型 前言 一.索引 1.1作用 1.2特点 1.3使用 1.3.1创建索引 1.3.2删除索引 1.3.3查看表中的索引 1.3.4查看SQ ...

  9. mysql数据完整性约束包括_MYSQL回顾(完整性约束相关)

    简介 MYSQL完整性约束条件主要包括: auto_increment not null 和 default unique primary key foreign key unique. primar ...

最新文章

  1. 【 Linux 】Linux下如何退出vim的一些常用命令总结
  2. 【转】海量数据相似度计算之simhash和海明距离
  3. java读取对象失败_jsp exception对象获取异常信息
  4. html基础内容样式
  5. inode file 结构
  6. java 26进制转10进制_求将任意10进制数字转为26进制字母的算法
  7. 《JAVA并发编程实践JavaConcurrencyinPractice-中文-高清-带书签-完整版(Doug Lea)》
  8. 万能五笔输入法支持linux系统,Ubuntu安装万能五笔输入法
  9. 2022-2028年中国高尔夫GPS手表行业竞争现状及投资策略研究报告
  10. python鸡兔同笼问题
  11. Macbook同时访问内外网
  12. 编写MTK6737平台的GPIO驱动例程(三)
  13. GPS导航电文——第四、五子帧数据解析
  14. FCPX视频剪辑Final Cut Pro X v10.5.4中文版 Macbook支持Silicon M1 附详细安装教程
  15. ApacheCN×Tesra 免费算力申请活动
  16. python烟花教程_干货教程:Python欠你一场浪漫烟花邂逅
  17. 7.5-7.13 人工智能行业每周精华文章汇总
  18. netstat命令常用参数
  19. 带着红领巾,站在巨人肩膀上登鼻上脸,文化或浮躁?
  20. php快速实现二维码接口

热门文章

  1. NeurIPS 2020 | 一种基于动作采样的简单高效的正则化强化学习方法
  2. ICCV 2019 | 从多视角RGB图像生成三维网格模型Pixel2Mesh++
  3. ACL 2018论文解读 | 基于排序思想的弱监督关系抽取选种与降噪算法
  4. 速度收藏!600页阿里技术全景图曝光,程序员看完都沸腾了
  5. Training RNNs as Fast as CNNs
  6. python标准库time_Python3标准库:time时钟时间
  7. linux该专接本还是工作_工作还是考研,我究竟该怎么选?
  8. Linux——Linux C语言编程基础知识
  9. Find a way
  10. 羊车门问题python_羊车门问题(示例代码)