MySql底层索引原理

news/2024/11/20 7:12:04/

前言

我们都知道MySql索引效率很高!那其中的原理是什么呢?先跑出个问题来:二叉树、红黑树(二叉平衡树)、BTree(平衡多叉树)、B+tree这几种类型中哪一种是mysql索引所选择的呢?

这个问题好多同学回答不出来,回去百度,结果也不是太明白吧!

这里我告诉大家,mysql所选的是B+tree,那B+tree又是什么呢?

B+tree优点

B+树:其实他是Btree的变种,是在他的基础上做了优化,

优点:

1、IO次数更少

2、范围查询简便

3、查询性能稳定

特征:

  1. 有K个子树的中间结点包含有k个元素(B树中有k-1个元素),每个元素只保存索引,而不保存数据,所有数据都保存在了叶子节点(k指的是每个节点的关键字个数,另外还有一个m指的是这棵树的高度)
  2. 所有数据都存放在了我们叶子节点上面,以及指向包含这些元素记录的指针(双向循环列表),并且我们的叶子节点是从小到大的顺序排列的,这样便于我们查找和排序。
  3. 所有的子节点都保存着中间节点元素

InnoDB存储引擎

InnoDB中的主键索引其实就是聚集索引,当然所有的数据都存在了主键索引位于的聚集索引B+Tree结构的叶子节点之中。这就是为什么我们在设计主键的时候要求我们的铸剑师有序原因了。假如我们的大小随机,那每次进来叶子节点的位置随机的,这样就会出现我们的页分裂,从而导致性能下降!

如果我们按照有序来处理,则每次都是按照顺序一排一排的进行排列,这样能够完美的比来了我们的页分裂。

好的,今天就先讲到这里,欢迎大家留言讨论

欢迎大家关注我的工种昊 《coder练习生》


http://www.ppmy.cn/news/8698.html

相关文章

更新和删除数据

目录1、更新数据2、根据其他表更新数据3、 删除数据4、根据其他表删除数据对于不加WHERE条件的UPDATE和DELETE要格外谨慎! 1、更新数据 1.1 更新全部数据:使用UPDATE关键字。语法如下: UPDATE 表名 SET 字段名新的值; 比如,更新学…

寒假每日一题W1D3——上课睡觉

题目描述 有 N 堆石子,每堆的石子数量分别为 a1,a2,…,aN。 你可以对石子堆进行合并操作,将两个相邻的石子堆合并为一个石子堆,例如,如果 a[1,2,3,4,5],合并第 2,3 堆石子,则石子堆集合变为 a[1,5,4,5]。…

【攻防世界】Web warmup

知识点讲解 这一题主要是利用了include的特性 如果include的文件名中含有“/”,那么它会识别其为一个带目录的文件,只有最后一个“/”后的字符串对应的文件会被包含,而前面的字符串都只是在指定目录 意思是,如果我们的payload是这…

Qt第五十五章:Qt Design Studio设计登录页并打包到python运行

目录 一、Qt Design Studio 二、导出所有文件到QRC(不要改动默认的QRC文件名称) 三、QRC转换成py 1.删除Constants.qml中的 2.将App.qml和Screen01.qml中的 3.转换 4、将QRC文件和转换后的py文件,复制到python项目中使用。 一、Qt Des…

转换通达信分钟数据,包括5分钟和1分钟数据

目录 1 前言 2 操作演示 3 代码 4 软件下载 5 stockpy整体功能介绍 1 前言 真正的市场高手不但要熟练掌握日线,对分钟线也要进行深入研究。缠中说禅在他的博客中讲到,年、季、月、周、日、60分钟、30分钟、5分钟、1分钟研究道理是相同的。粒度越细&…

20230102单独编译Toybrick的TB-RK3588X开发板的Android12的内核

20230102单独编译Toybrick的TB-RK3588X开发板的Android12的内核 2023/1/2 17:40 《RK3588_Android12_SDK_Developer_Guide_CN.pdf》 原厂的开发板rk3588-evb1-lp4-v10单独编译内核的方式: cd kernel-5.10 export PATH../prebuilts/clang/host/linux-x86/clang-r4161…

校招前端面试题集锦

JavaScript 类数组对象的定义? 一个拥有 length 属性和若干索引属性的对象就可以被称为类数组对象,类数组对象和数组类似,但是不能调用数组的方法。常见的类数组对象有 arguments 和 DOM 方法的返回结果,还有一个函数也可以被看作…

API管理神器:Apifox

前言 代码未动,文档先行 其实大家都知道 API 文档先行的重要性,但是在实践过程中往往会遇到很多困难。 程序员最讨厌的两件事:1. 写文档,2. 别人不写文档。大多数开发人员不愿意写 API 文档的原因是写文档短期收益远低于付出的…