MySql索引的数据结构

mysql索引是什么?

想象一下,你手上有一本数学教材,但是目录被别人给撕掉了,现在要你翻到三三角函数的那一页,该怎么办?

没有了目录,就只有两种方法,要么一页一页翻,要么随机翻。

如果数据表没有目录的话,那要查询满足条件的记录行,就需要进行全表扫描,现在的互联网应用,数据量都非常大,百万千万都很常见,这要是全表扫描,那可就恼火了,所以为了加快查询的速度,得给数据表也设置目录,这个为数据表设计的目录就是索引

MySql采用B+数作为数据结构的原因

二叉树——>平衡二叉树——>B树——>B+树

想要实现查询,最简单的办法就是二分法查找,比如要根据ID来查找,就可以根据ID字段来构建一棵二叉树,顺着二叉树就可以找到要查询的内容,但是普通的二叉树存在一个问题,就是随着新的数据节点不断地插入,很有可能造成树的不平衡,极端的情况之下甚至会变成一个链表,这就非常不利于数据的查询

为了防止上述情况的出现,可以将二叉树升级一下变成一个平衡二叉树,这样就避免了不平衡的情况,但是随着数据量越来越大,这棵平衡二叉树的高度就会变得非常深,每层的节点数被锁定位上层节点的二倍,以此类推,即便是存1000条数据,二叉树就会变成10层,查找数据就需要多次分叉,每一次分叉都需要读取一次硬盘的数据,这样一来,一次查询就需要进行好多次的IO操作,而读取硬盘的数据,相对于内存是非常慢的。

后来,B树的使用使得书的深度问题得到了解决。在B树中,一个节点可以有多个数据,并且他们按顺序排列起来,此外原来二叉树的节点最多只能分开两个叉,现在可以开非常多的分叉,查找的时候还是先从根节点触发,因为节点里的所有数据都是有序排列的,在节点中试用二分法就可以快速的定位到,如果没有查到,就根据数据节点所在的区间,去往下一级分叉的节点,重复查找的过程,由于可以有很多的分叉,所以这棵B树变得非常扁平化,即使是非常大的数据量,也只需要很少几次IO访问就能完成查找。

【有很多的数据库都采用了B树作为数据存储的和索引的数据结构】

但是B树还是存在一些问题,比如 他的查询效率不太稳定,有些在根节点或者根节点附近就能找到,那么他的查询效率就很快,如果距离根节点的距离比较远,那么查询的效率就比较慢了,所以性能不是很稳定。

另外,B树也不适合用来做范围查找,因为数据散落在不同的节点上,要查询某个范围的数据,就需要在B树上不用层级节点间进进出出,效率也会随之降低。

【MySql的索引采用B+树的数据结构】

所以就MySql就采用了B+树作为索引的结构。

B+树将数据全部都放在了叶子节点上,这样一来不管要查询哪个数据,最终都要走到叶子节点上,解决了查询性能不稳定的问题,其次,上面这些节点不用来存储数据了,省下来的空间用来存储指向其他节点的指针,这样一来,中间的节点中可以分出的叉就变得更多了,整个书变得更加的扁平,进一步减少IO查询的次数,最后再将叶子节点之间用指针连接起来,这样一来,就能解决范围查询的问题了。

在一些其他的场景中,还可以使用哈希索引来设计。

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

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

相关文章

反激电源的类型与特点

主要分为 1 固定频率(CCMDCM) 2 可变频率控制(CRM电流临界模式) 这三种模式是很好辨别的,首先我们看左边的连续模式,Vds能看到他有一些尖峰毛刺,这是场效应管关闭的时候,LRC谐振导…

合势而上 聚力成峰 |“我店平台616购物嘉年华发布会”圆满落幕

引言 合势而上,聚力成峰;我店力量,势如破竹。 6月2日,“合势而上聚力成峰——我店平台616购物嘉年华发布会”于杭州顺利举办。会上,我店平台董事长肖翰成携手公司一众高管,正式启动“我店平台616购物嘉年华…

Java中getBytes()方法

我以为旅人将我 热情都燃尽 —— 24.6.4 String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示 而与getBytes相对的,可以通过new String(byte[], decode)的方式来还原这个“深”字时,这个new String(byte[],…

屏幕录制工具分享6款,附上详细电脑录屏教程(2024全新)

当你即将参加一个重要的在线会议或一堂关键的直播课,但又担心错过关键点或无法及时做笔记时,屏幕录制无疑是最好的方法之一。屏幕录制是一项非常有价值的技能,它能让你出于各种目的捕捉屏幕上的活动。无论你的目的是创建教程、演示软件功能、…

HiveMetastore

HiveMetastore 背后的存储 select * from DBS; select * from TBLS; select * from TABLE_PARAMS; 查找出没有 totalSize stats 的table SELECT DBS.NAME,t.TBL_NAME from DBS inner join (select DB_ID,TBL_NAME from TBLS where TBLS.TBL_ID not in(select TBL_ID from T…

家里总是“飞尘、毛絮”多怎么办?用这个东西教你轻松解决难题

每次清洁家里卫生的时候,都会发现家里空气中飘浮着毛毛和灰尘,地板上、沙发套、床单被罩都是毛毛。明明每天清洁,为什么家里还有这么多“飞尘、毛絮”呢?如果不将这些“飞尘、毛絮”清洁干净,空气中的飞尘、毛絮进入我…

任务3.3 学生喂养三种宠物:猫、狗和鸟

本任务旨在通过Java面向对象编程中的多态性和方法重载概念,实现一个学生喂养三种不同宠物(猫、狗、鸟)的程序。 定义基类和派生类 创建一个Animal基类,包含所有动物共有的属性和方法,如name、age、speak()、move()和ea…

一篇文章讲透排序算法之归并排序

0.前言 本篇文章将详细解释归并排序的原理,以及递归和非递归的代码原理。 一.概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使…

虚拟机Ubuntu 22.04上搭建GitLab操作步骤

GitLab是仓库管理系统,使用Git作为代码管理工具。GitLab提供了多个版本,包括社区版(Community Edition)和企业版(Enterprise Edition)。实际应用场景中要求CPU最小4核、内存最小8GB,非虚拟环境。 以下是在虚拟机中安装社区版步骤:…

git获取的项目无法运行

一、Unsupported engine 问题:在使用命令npm install下载依赖项的时候就遇到了这个问题,有帖子说多试几次,其实这是提示node版本问题,版本的更新出现兼容性问题,多试几次也没用。 解决方案: 更新node.js的…

Paper速读-[Visual Prompt Multi-Modal Tracking]-Dlut.edu-CVPR2023

文章目录 简介关于具体的思路问题描述算法细节实验结果模型的潜力模型结果 论文链接:Visual Prompt Multi-Modal Tracking 开源代码:Official implementation of ViPT 简介 这篇文章说了个什么事情呢,来咱们先看简单的介绍图 简单来说&…

【玩转C语言】第一讲--->C语言概念

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 引言: 1. C语言是什么 2. C语言的辉煌历史 3. 第一个C语言程序 4. main()函数 5. printf() 函数 6. 库函数 6.1 库函数概念 7. 关键字介绍 …

工具:一键采集 平台:TB+PDD+JD...

什么是数据集? 电商商品数据集通常是指收集自电子商务平台的商品信息的结构化数据集合。这些数据包括但不限于商品名称、价格、描述、用户评价、分类标签、卖家信息、销售量、库存量、图片链接等。数据集可以由电商平台公开提供,也可以通过网络爬虫等技术…

沟通技巧(Communication Skills 业务分析能力)

背景 业务分析的胜任力模型,有六大部分,今天我们看第二部分,业务知识 Analytical Thinking and Problem Solving :分析判断及问题解决能力Behavioural Characteristics: 行为特质(责任、道德、适应性等等…

Kubernetes小记

Kubernetes 集群 架构 一个有效的 Kubernetes 部署称为集群,可以将 Kubernetes 集群分为两个部分:控制平面与计算设备(或称为节点)控制组件 控制平面 K8s 集群的神经中枢,负责处理重要的工作,以确保容器以足够的数量…

GCN 代码解析(一) for pytorch

Graph Convolutional Networks 代码详解 前言一、数据集介绍二、文件整体架构三、GCN代码详解3.1 utils 模块3.2 layers 模块3.3 models 模块3.4 模型的训练代码 总结 前言 在前文中,已经对图卷积神经网络(Graph Convolutional Neural Networks, GCN&am…

小程序CI/CD之自动化打包预览并钉钉通知发布进程

小程序打包方式分为两种:手动打包、自动打包 那如何实现 自动打包 呐?我们今天就来聊一聊! 首先,很重要,看 官方文档 这里提到今天我们要聊的“主角” miniprogram-ci miniprogram-ci 是从微信开发者工具中抽离的关于…

nacos开启鉴权

nacos版本1.4.3 1.nacos配置开启鉴权 application.properties 或 application.yaml 文件中 nacos.core.auth.enabled 设置为 true 2.修改JWT令牌 如果是Linux系统可以使用命令随机生成 echo -n ThisIsARandomlyGeneratedSecureKey32CharactersLong | base64 nacos.core.au…

【HarmonyOS-Stage应用模型-UIAbility生命周期】

概述 在应用开发过程中,组件的生命周期尤为重要,当用户打开、切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换。我们可以通过生命周期来对应用的状态进行监控并执行特定的操作。比如在创建时进行应用初始化、…

网络摄像头项目

1.OV2640 简介 OV2640 是 OV(OmniVision)公司生产的一颗 1/4 寸的 CMOS UXGA(1632*1232)图像 传感器。该传感器体积小、工作电压低,提供单片 UXGA 摄像头和影像处理器的所有功能。通 过 SCCB 总线控制,可以…