Mysql索引底层数据结构——Java全栈知识(28)

Mysql索引底层数据结构

1、什么是索引

索引在项目中还是比较常见的,它是帮助MySQL高效获取数据的数据结构,主要是用来提高数据检索的效率,降低数据库的IO成本,同时通过索引列对数据进行排序,降低数据排序的成本,也能降低了CPU的消耗

2、索引的优缺点

索引的优点:

  1. 提高数据库检索效率,降低数据库 IO 成本
  2. 可以通过索引对数据进行排序,减少排序成本
    缺点:
  3. 占用磁盘空间
  4. 对于写多查少的数据,不适合加索引。

3、红黑树和二叉树

我们都知道 Mysql 的 InnoDB 的索引使用的是 B+树,但是为什么使用 B+树呢。我们先了解一下二叉树和红黑树这两种的数据结构。image.png|600

首先二叉树来说,如果在理想状态下,也就是完全二叉树的状态下,我们查找一个数据的时间复杂度是 O(logN)。
但是如果像上图一样,二叉树的数据出现了偏移,也就是树的退化现象。
当我们构建二叉树的时候插入的是有序的数据,那么就会出现树的退化。
直接后果就是,该二叉树变成了链表,查询一个数据的时间复杂度变成了 O(N),那么索引就起不到我们设计之初想让他起到的作用了(增快查询速度)。

为了解决上述的问题,有一种数据结构也就是红黑树,通过节点之间的旋转,避免了树的退化现象。
image.png|400

红黑树的性质: 红黑树是一棵二叉搜索树,它在每个节点增加了一个存储位记录节点的颜色,可以是 RED, 也可以是 BLACK;通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的二倍,因而近似平衡。

当红黑树发生节点偏移的时候通过旋转来保证树的平衡。
image.png|500

但是,对于红黑树来讲如果我们的数据比较多的情况下,那么查询数据还是 O(logN)还是跟树的高度有关。我们需要尽可能的降低树的高度。

4、B 树

B 树是一种多叉路衡查找树。
我们假定一个 B 树的度为 5,那也就是说这棵树的节点最大可以容纳四个数据,五个指针。
image.png
这样就可以解决树的高度过高的问题,但是 B 树的每个节点上面都有数据,这对于我们排序和查找不是那么方便,那有没有更好的数据结构呢?

5、B + 树

B+Tree 是在 BTree 基础上的一种优化,使其更适合实现外存储索引结构。
image.png
B+树的特点:在 B 树的基础上修改了以下几点:1、B+树只有叶子节点才储存数据。2、B+树的叶子节点带有指针组成一个双向循环的链表。

B 树和 B+树的区别

1、在 B 树中,非叶子节点和叶子节点都会存放数据,而 B+树的所有的数据都会出现在叶子节点,在查询的时候,B+树查找效率更加稳定
2、在进行范围查询的时候,B+树效率更高,因为 B+树都在叶子节点存储,并且叶子节点是一个双向链表

6、Hash 索引:

原理:在底层维护一张哈希表,通过哈希算法将键值算成hash值,映射到相应的槽位,存储在哈希表
特点:

  1. Hash索引只能用于对等的比较,不支持范围查询
  2. 无法利用索引完成排序操作
  3. 查询效率高只用进行一次检索就可以,效率通常要比B+树高
    注意: 只有 Memory 存储引擎具有 Hash 索引
    InnoDB 具有自适应 Hash 索引,会根据 B+树索引自动构造 Hash 索引

7、为什么 InnoDB 选择使用 B+树?

  1. 相对于二叉树,层级更少,搜索效率高;
  2. 对于 B-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加树的高度,导致性能降低;
  3. 相对 Hash 索引,B+tree 支持范围匹配及排序操作;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arduino按钮

Arduino - Button Arduino - 按钮 参考: ezButton-按钮库从按钮开关看上拉pull-up电阻、下拉电阻按键的防抖动处理 The button is also called pushbutton, tactile button or momentary switch. It is a basic component and widely used in many Arduino projec…

【gif制作】Win下视频生成GIF;工具GifCam单色保存,灰度保存,调速,编辑删除帧添加文本

下载地址 https://blog.bahraniapps.com/gifcam/#download https://gifcam.en.softonic.com/ 界面功能 GifCam 简洁、小巧的 gif 录制软件。GifCam就像照相机一样位于所有窗口的顶部,可以移动它并调整其大小录屏所需的区域。 如图:空闲状态下窗口内…

给XPTABLE添加右键菜单(XPTable控件使用说明十一)

用户右键点击TABLE控件,弹出一个菜单,选择菜单对应到相关的操作 1、增加一个contextMenuStrip6控件,在里面增加2个ITEM,名称用中文命名 2、给两个ITEM添加点击后的事件 3、在XPTABLE上增加点击事件: 4、当用户右键点击…

vantUI upload 上传组件v-model绑定问题

直接绑定一个数组会有问题,删除失效/上传不了等等 解决在v-model绑定的数组外包一个对象即可

零基础MySQL完整学习笔记

零基础MySQL完整学习笔记 1. 基础操作(必须会!)1.1 修改密码(4种方法)1.2 创建新用户1.3 导入数据库 2. SQL四种语言介绍2.1 DDL(数据库定义语言)2.2 DML(数据操纵语言)2.3 DCL(数据库控制语言)2.4 TCL(事务控制语言) 3. 数据库操作3.1 创建数据库3.2 查询数据库3.3 删除数据库…

聊聊 oracle varchar2 字段的gbk/utf8编码格式和字段长度问题

聊聊 oracle varchar2 字段的gbk/utf8编码格式和字段长度问题 1 问题现象 最近在排查某客户现场的数据同步作业报错问题时,发现了部分 ORACLE 表的 varchar2 字段,因为上游 ORACLE数据库采用 GBK 编码格式,而下游 ORACLE 数据库采用UTF8 编…

封装了一个优雅的iOS转场动画

效果图 代码 // // LBTransition.m // LBWaterFallLayout_Example // // Created by mac on 2024/6/16. // Copyright © 2024 liuboliu. All rights reserved. //#import "LBTransition.h"interface LBPushAnimation:NSObject<UIViewControllerAnimated…

【服务器02】之【阿里云平台】

百度一下阿里云官网 点击注册直接使用支付宝注册可以跳过认证 成功登录后&#xff0c;点击产品 点击免费试用 点击勾选 选一个距离最近的 点满GB 注意&#xff1a;一般试用的时用的是【阿里云】&#xff0c;真正做项目时用的是【腾讯云】 现在开始学习使用&#xff1a; 首先…

2024年综合艺术与媒体传播国际会议(ICIAMC 2024)

2024年综合艺术与媒体传播国际会议(ICIAMC 2024) 2024 International Conference on Integrated Arts and Media Communication (ICIAMC 2024) 会议地点&#xff1a;贵阳&#xff0c;中国 网址&#xff1a;www.iciamc.com 邮箱: iciamcsub-conf.com 投稿主题请注明:ICIAMC…

【Python机器学习】DBSCAN(具有噪声的基于密度的空间聚类应用)

DBSCAN&#xff08;具有噪声的基于密度的空间聚类应用&#xff09;是一种非常有用的聚类算法&#xff0c;它的主要优点是不需要用户先验地设置簇的个数&#xff0c;可以划分具有复杂形状的簇&#xff0c;还可以找出不属于任何簇的点。DBSCAN比凝聚聚类和k均值稍慢&#xff0c;但…

常见加密方式:MD5、DES/AES、RSA、Base64

16/32位的数据&#xff0c;最有可能就是使用md5加密的 使用对称加密的时候&#xff0c;双方使用相同的私钥 私钥&#xff1a;单独请求/隐藏在前端的隐藏标签当中 二、RSA非对称密钥加密 公钥加密&#xff0c;私钥解密 私钥是通过公钥计算生成的 加密解密算法都在js源文件当…

U盘数据恢复全攻略:从原理到实践

一、引言&#xff1a;为何U盘数据恢复至关重要 在信息化时代&#xff0c;U盘作为便携存储设备&#xff0c;广泛应用于各个领域。然而&#xff0c;U盘数据的丢失往往给个人和企业带来极大的困扰。数据丢失的原因多种多样&#xff0c;可能是误删除、格式化、文件系统损坏&#x…

session 共享、Nginx session 共享、Token、Json web Token 【JWT】等认证

.NET JWT JWT 》》Json Web Token header . payload . Signature 三部分组成 JWT 在线生成 》》 https://jwt.io/ 》》https://tooltt.com/jwt-encode/ 》》解码工具 https://tool.box3.cn/jwt.html JWT 特点 无状态 JWT不需要在服务端存储任何状态&#xff0c;客户端可以携…

【FFMPEG+Mediamtx】 本地RTSP测试推流记录

利用本地FFMPEGMediamtx 搭建本地RTSP测试推流电脑摄像头 起因 本来要用qt的qml的Video做摄像头测试。 &#x1f614;但是&#xff0c;不在现场&#xff0c;本地测试&#xff0c;又要测试rtsp流&#xff0c;又因为搜了一圈找不到一个比较好的在线测试rtsp推流网址&#x1f6…

自从用了这个 69k star 的项目,前端小姐姐再也不催我了

一般在开发前后端分离的项目时&#xff0c;双方会定义好前后端交互的 http 接口&#xff0c;根据接口文档各自进行开发。这样并行开发互不耽误&#xff0c;开发好后做个联调就可以提测了。 不过最近也不知道怎么回事&#xff0c;公司新来的前端小姐姐总是在刚开始开发的时候就…

全行业通用商城小程序源码

一站式购物新体验 一、引言&#xff1a;开启数字化购物新时代 在数字化快速发展的今天&#xff0c;小程序成为了商家们连接消费者的重要桥梁。特别是“全行业通用商城小程序”&#xff0c;以其便捷的购物体验和多样化的功能&#xff0c;成为了越来越多商家和消费者的首选。本…

Day12 单调栈 下一个最大元素

503. 下一个更大元素 II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数…

Unity URP简单烘焙场景步骤

Unity URP简单烘焙场景步骤 前言项目场景布置灯光模型Lighting设置环境设置烘焙前烘焙后增加角色 问题解决黑斑硬边清理缓存 参考 前言 项目中要烘焙一个3D场景&#xff0c;用的URP渲染管线&#xff0c;简单记录一下。 项目 场景布置 灯光 因为场景中有能动的东西&#xf…

JAVA每日作业day6.24

ok了家人们今天学习了一些关键字&#xff0c;用法和注意事项&#xff0c;静态代码块这些知识&#xff0c;闲话少叙我们一起看看吧。 一&#xff0c;final关键字 1.1 final关键字的概述 final&#xff1a; 不可改变。可以用于修饰类、方法和变量。 类&#xff1a;被修饰的类&a…

Zoho邮箱怎么注册?最强完整指南

Zoho企业邮箱&#xff0c;凭借其16年的产品历程和卓越的服务品质&#xff0c;已经成为全球超过1800万企业级客户的信赖之选。今天&#xff0c;我们将手把手教你如何注册Zoho邮箱。 一、Zoho邮箱是什么&#xff1f; Zoho邮箱是Zoho Workplace套件中的核心产品&#xff0c;专门…