深入理解MySQL索引底层数据结构与算法

索引的本质

索引是帮助MySQL高效获取数据的排好序数据结构

索引的数据结构

  • 二叉树
  • 红黑数
  • Hash表
  • B-Tree

MySQL索引底层为啥不用二叉树

如图,对单边增长的数据,索引效率没有什么提升
在这里插入图片描述

MySQL索引底层为啥不用红黑数

红黑数:二叉平衡树
随着数据的增长,数的高度会越来越高
对索引的查找效率没有什么帮助
在这里插入图片描述

B Tree树

  • 叶节点具有相同的深度,叶子节点的指针为空
  • 所有索引元素不重复
  • 节点中的数据索引从左到右递增排列
    在这里插入图片描述

B+Tree树

  • 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
  • 叶子节点包含所有的索引字段

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

B树和B+树在构建索引上,MySQL为什么最后选择了B+树?

对于树结构来说,影响索引查找效率的就是树的高度,B+树非叶子结点不存储date,只存储索引,这样的话在存储相同数据量的情况下,B+树数据结构的索引树比B树的高度更小,查询速度更快。

Hash结构

在这里插入图片描述

MyISAM存储引擎实现

MyISAM索引文件和数据文件是分离的(非聚集)

InnoDB索引引擎索引实现

在这里插入图片描述

表数据文件本身就是按照B+树组织的一个索引结构文件
聚集索引-叶子结点包含了完整的数据记录

聚集索引和非聚集索引在查找速度上那一快?

聚集索引。聚集索引查到索引后可以直接获取数据,非聚集索引在查到索引后还要跨文件获取数据。

为什么建议InnoDB表必须建主键,并且推荐使用整型的自增主键?

表数据文件需要B+树来组织索引结构文件
如果表中有主键,MySQL就会用主键来组织B+树,如果没有主键就会选择所有元素都不一样的一列来组织B+树,如果不存在,MySQL会创建一个隐藏列,来维护一个唯一id来组织B+树。

在找元素的时候是从根结点开始查找,索引定位的过程中,经历过很多次比大小,用整型比大小速度快,且整型占用内存小。

非自增时会导致叶子节点的分裂和树的自我平衡调整,影响效率。自增的话只需要往后面添加就可以了。

为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省空间)

联合索引最左前缀原理

如图:联合主键索引
在这里插入图片描述
索引是最左前缀原理,因为是排好序的
例如:
select * from table where name = ? and age = ?
由图可知,B+树是先按照name进行排序,然后按照age排序,最后按照position进行排序。上面这个SQL语句就可以用到拍好序的索引;

select * from table where age = ? and position = ?
由于索引结构age是在name排序后再排的序,所以不通过name,直接通过age进行查找,相当于没有排序,所以不走索引。

学习数据结构的网站
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/201717.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

王道p18 04.从有序顺序表中删除其值在给定值s与1之间(要求s<1)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行。(c语言代码实现)

视频讲解在这里哦(感谢支持!)👇 p18 第四题王道数据结构课后算法题(c语言代码实现)_哔哩哔哩_bilibili 本题代码如下 void deletest(struct sqlist* L, int s, int t) {int i 0;int j 0;if (s > t …

onelist能让alist聚合网盘拥有海报墙

什么是 onelist ? onelist 是一个类似 emby 的专注于刮削 alist 聚合网盘形成影视媒体库的程序。 主要解决以下痛点: alist 挂载云盘后能在网页端看视频,却没有分类,没有海报墙;使用 webdav 挂载本地后,用…

客服管理者如何有效管理客服团队,有哪些高效方式?

在如今的市场竞争中,客户服务是企业成功的关键因素之一。因此,客服团队的有效管理至关重要。客服管理者需要了解如何有效地管理客服团队,以确保客户的满意度和忠诚度,从而提高企业的竞争力。 以下是客服管理者如何有效管理客服团队…

Stable Diffusion绘画系列【6】:东方美学作品

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…

可变参数列表

demo 2:求任意多个数据中的最大值(至少一个),要求不能使用数组 因为目前参数个数不确定,那么函数编写的时候,参数个数也无法确定,换句话说,函数也就没法编写 不过,C提供了满足该场景的解决方案&…

Qt 天气预报项目

参考引用 QT开发专题-天气预报 1. JSON 数据格式 1.1 什么是 JSON JSON (JavaScript Object Notation),中文名 JS 对象表示法,因为它和 JS 中对象的写法很类似 通常说的 JSON,其实就是 JSON 字符串,本质上是一种特殊格式的字符串…

使用影刀指令+python实现简单的长文本乱序加密

本文意在利用影刀指令python代码,实现一种较为简单的长文本加密和解密,流程结构分为两步: 加密原理–是把字符转为列表,利用列表random模块中的shuffle函数做随机乱序。解密原理–是利用了列表的索引追踪,先前创建字典…

VSCODE+QEMU+WSL调试RISCV代码(SBI、kernel)

前言 最近在对RISC-V架构比较感兴趣,正好手头有《RISC-V体系结构编程与实践》的书籍,就打算跟随笨叔将这块的知识学习起来,最开始当然是需要搭建一个基础的实验平台,本来笨叔是贴心的提供了VMare的环境,奈何天生叛逆的…

Ubuntu部署jmeter与ant

为了整合接口自动化的持续集成工具,我将jmeter与ant都部署在了Jenkins容器中,并配置了build.xml 一、ubuntu部署jdk 1:先下载jdk-8u74-linux-x64.tar.gz,上传到服务器,这里上传文件用到了ubuntu 下的 lrzsz。 ubunt…

文件基础知识

计算机中的流:在C语言中将通过输入/输出设备(键盘、内存、显示器、网络等)之间的数据传输抽象表述为“流”。 1、文本流和二进制流 在文本流中输入输出的数据是一系列的字符,可以被修改在二进制流中输入输出数据是一系列字节&am…

C++初阶(十三)vector

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、vector的介绍二、vector的模拟实现1、模拟实现2、测试结果 一、vector的介绍 vector的文…

基于YOLOv5的人群计数系统设计系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介系统概述系统功能核心技术系统架构系统优势 二、功能三、系统四. 总结  总结 一项目简介 基于YOLOv5的人群计数系统设计是一个非常有趣且具有挑战性的项目…

html5各行各业官网模板源码下载(1)

文章目录 1.来源2.源码模板2.1 HTML5白色简洁设计师网站模板 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134682321 html5各行各业官网模板源码下载,这个主题覆盖各行业的html官网模板,效果模…

软件设计师——法律法规(一)

📑前言 本文主要是【法律法规】——软件设计师法律法规的题目,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日…

【LeetCode刷题】数组篇1

🎇数组简单题Part 🌈 开启LeetCode刷题之旅 🌈 文章目录 🎇数组简单题Part🍰1.两数之和👑思路分析1.暴力法2.哈希表法 🍰26.删除有序数组中的重复项👑思路分析1.双指针2.利用vector…

微信小程序上传报错TypeError: Failed to fetch

上传之后报message:TypeError: Failed to fetch这个错误。 关掉项目 > 选择项目的ide界面右上有个齿轮设置 > 代理

【面试】css预处理器之sass(scss)

目录 为什么引入css预处理器 可读性 嵌套:关系明朗 选择器 属性 伪类‘’ 变量:语义明确 默认变量:美元符号 $ 变量名:值 !default 全局变量::global { $global-x: } 变量插值:#{} map键值对:$…

函数保留凸性的一些运算,限制为一条线

凸优化在学术研究中非常重要,经常遇到的问题是证明凸性。常规证明凸性的方式是二阶导数的黑塞矩阵为半正定,或者在一维函数时二阶导数大于等于零。但很多时候的数学模型并不那么常规、容易求导的,若能够知道一些保留凸性的运算,将…

Zemax光学设计——单透镜设计

单透镜系统参数: 入瞳直径:20mm F/#(F数):10 全视场:10 波长:587nm 材料:BK7 优化方向:最佳均方根光斑直径 设计步骤 一、单透镜系统参数 步骤一:入…

红黑树的插入

一.红黑树的特征 红黑树是二叉搜索树红黑树分为内部结点和外部结点,将空指针视为外部结点,其它结点视为内部结点根结点和外部结点都是黑色从根结点到外部结点的路径上不能有连续的红结点从根结点到外部结点的路径上黑结点的数目相同从根结点到外部结点的最长路径的长度不超过最…