MySQL--索引底层数据结构详解

索引是什么?

索引是帮助MySQL高效获取数据的排好序的数据结构,因此可知索引是数据结构。
概念很抽象,但是类比生活中的例子就很容易理解,比如一本厚厚的书,我们想取找某一小节,我们可以根据目录去快速找到对应的章节,其实这个目录就可以叫这本书的索引,而数的目录又分为大章节小章节,如果倒着看是不是很像一棵树呢?

常见树的数据结构及特点:

二叉树:
二叉树是每个节点最多有两个子节点的树结构,通常有左子树和右子树,左右子树是有顺序的,左子树的值要小于父节点,右子树的值要大于父节点。

二叉树示意图:
在这里插入图片描述

极端情况下二插树可能没有左右子树,比如一组递增的数据,最终就形成了一个链表。

极端情况下二叉树示意图:
在这里插入图片描述

为了避免这种情况的发生,产生了平衡二叉树。

平衡二叉树(AVL Tree):
平衡二叉树是一种特殊的二叉树,除了满足二叉树的特征之外,它还要求左右两颗子树的高度差的绝对值不能超过1,且左右两棵子树都是平衡二叉树。
平衡二叉树解决了极端情况下退化为链表的问题,但是平衡二叉树满足了每个节点最多两个子节点的特点,如果数据量比较大的情况下,二叉树的高度会非常,查询的时候会多次进行磁盘IO,查询的性能会比较差,因此诞生了B-Tree。

同样数据,使用平衡二叉树演示:
在这里插入图片描述
很明显同样数据AVL树没有出现二叉树的情况。

B-Tree的特点:

  • 度(Degree):节点存储数据的个数,B-Tree允许一个节点存储多个数据。
  • 每个节点可以有M个子节点。
  • 叶子节点具有相同的深度。
  • 节点的数据从左到右顺序排列。
  • 叶子节点指针为空。

同样数据,B-Tree演示:

在这里插入图片描述

B+Tree的特点:

  • 非叶子节点不存储数据,只存储索引key,可以增加度(key占用的空间远小于data占用的空间)。
  • 叶子节点存储了全部数据,且增加了顺序访问指针,提高了区间访问性能,支持范围查询。

InnoDB中存储引擎页大小是16KB,一个节点就是一页,而一个Long类型的主键id占用8个字节,故叶子节点如果只存储索引的话,一个节点就能存储大量的索引key,这样就大大减少了节点个数,同时也节省了存储空间。

同样数据,B+Tree演示:

在这里插入图片描述
很直观的看到,B+Tree叶子节点多了指针,且叶子节点有全部数据,数据从左到右依次增大。

好用的数据演示网站:

在这里插入图片描述

Hash索引的特点:

  • hash索引不支持范围查找。
  • hash存在哈希冲突问题。
  • hash索引经过一次查询就可以定位到数据,查询效率比B+Tree高。

Full-text全文索引的特点:

仅可用于 MyISAM 存储引擎,用于检索文本信息的, 针对较大的数据,生成全文索引很耗时间及空间,在MySQL中一般不常用。

聚集索引和非聚集索引?

聚集索引和非聚集索引是按物理存储结构来划分的一个概念。

  • 聚集索引也叫聚族索引,是以主键创建的索引,聚集索引叶子节点存储的是数据,一个表中只存在一个聚集索引,且只存在于InnoDB引擎中。
  • 非聚集索引也叫辅助索引,索引和数据不在一起,非聚集索引叶子节点存储的是索引对应数据行的主键,通过索引行找到主键后,根据主键去找对应的数据。

MySQL InnoDB、MyISAM、Memory存储引擎对索引数据结构的支持:

数据类型InnoDBMyISAMMemory
B+Tree支持支持支持
Hash不支持(用户无法手动创建Hash索引)不支持支持
Full-text5.6版本后支持支持不支持

如有不正确的地方请各位指出纠正。

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

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

相关文章

魔法之线:探索string类的神秘世界

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…

Java SE String类(一):常用方法(上)

1. 常用方法 1.1 字符串构造 String类的常用构造方法只有以下三种 public class Main {public static void main(String[] args) {String s1 "hello";//使用常量串进行构造String s2 new String("hello");//创建String对象char[] array {h,e,l,l,o};…

基于springboot的医护人员排班系统

预览地址 论文预览https://pan.imgbed.link/kkpreview/onlinePreview?urlaHR0cHM6Ly9wYW4uaW1nYmVkLmxpbmsvZmlsZS8yMTYxNT9mdWxsZmlsZW5hbWU95Z%2B65LqOc3ByaW5nYm9vdOeahOWMu%2BaKpOS6uuWRmOaOkuePreezu%2Be7n%2BiuuuaWhy5kb2M%3D 链接:https://pan.baidu.com/s/…

数据复制:释放新质生产力的关键钥匙

今年两会,新质生产力成为最热词汇,引起社会各界广泛关注。 所谓新质生产力,本质是一种新型的生产力形态,它由技术革命性突破、生产要素创新性配置、产业深度转型升级而催生,以劳动者、劳动资料、劳动对象及其优化组合…

24-Java策略模式 ( Strategy Pattern )

Java策略模式 摘要实现范例 策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更加灵活,具有更好的维护性和扩展性。 策略模式属于行为型模式 摘要 1. 意图 针对一组算法,将每一个算法封装到具有共…

【C++进阶】C++继承概念详解

C继承详解 一,继承的概念和定义1.1 继承的概念1.2 继承的定义1.3 继承关系和访问限定符 二,基类和派生类的对象赋值转移三,继承的作用域四,派生类的默认成员函数五,继承和友元&静态成员和继承六,菱形继…

【案例】义乌佛堂智慧蔬菜产业园投入使用,为高效农业提供技术保障

项目背景 佛堂蔬菜产业园位于佛堂镇毛陈村,由义乌市市场发展集团旗下义乌市农业开发有限公司负责打造。园区于2021年开始筹建,总投资5000万元,占地面积约450亩,建有标准化蔬菜大棚72个。 传统大棚对农民依赖性特别强,需…

视频素材哪里找?几个高清短视频素材下载网站分享

哥们姐妹们,是不是在追求完美的短视频创作路上因为找不到那个令人心动的高清视频素材而头大呢?别着急,我这儿有几个秘密武器,即几个超给力的短视频素材网站,让你的作品从此分分钟高大上起来 1,蛙学府 这里…

什么是模块化机房?

在这个数据驱动的时代,数据中心的作用变得日益重要。而模块化机房,作为一种创新的数据中心解决方案,正在逐渐改变我们构建和管理这些关键设施的方式。但究竟什么是模块化机房呢?它又为何受到越来越多行业的青睐?在本文…

Caffeine--实现进程缓存

本地进程缓存特点 缓存在日常开发中起着至关重要的作用, 由于存储在内存中, 数据的读取速度非常快,能大量减少对数据库的访问,减少数据库的压力. 缓存分为两类: 分布式缓存, 例如Redis: 优点: 存储容量大, 可靠性更好, 可以在集群间共享缺点: 访问缓存存在网络开销场景: 缓存数…

1688平台最关键的接口接入实例|获得1688商品详情| 按关键字搜索商品| 按图搜索1688商品(拍立淘)| 获得淘口令真实url

参数说明 通用参数说明 version:API版本key:调用key,测试key:test_api_keyapi_name:API类型[item_get,item_search]cache:[yes,no]默认yes,将调用缓存的数据,速度比较快result_type:[json,xml,serialize,var_export]返回数据格式,默认为jsonl…

pytorch CV入门3-预训练模型与迁移学习

专栏链接:https://blog.csdn.net/qq_33345365/category_12578430.html 初次编辑:2024/3/7;最后编辑:2024/3/8 参考网站-微软教程:https://learn.microsoft.com/en-us/training/modules/intro-computer-vision-pytorc…

三个el-radio选项怎么知道用户选择了哪一个

问: 回答: 要获取用户选择了第二个还是第三个 <el-radio>&#xff0c;你可以在 change 事件处理函数 changeAPPVersion 中判断选中的值是什么。你需要给第二个和第三个 <el-radio> 设置不同的值&#xff0c;然后在 changeAPPVersion 方法中根据这个值来确定用户选…

Selenium自动化测试面试题全家桶

1、什么是自动化测试、自动化测试的优势是什么&#xff1f; 通过工具或脚本代替手工测试执行过程的测试都叫自动化测试。 自动化测试的优势&#xff1a; 1、减少回归测试成本 2、减少兼容性测试成本 3、提高测试反馈速度 4、提高测试覆盖率 5、让测试工程师做更有意义的…

建造家庭泳池位置选择尤为重要

建造家庭泳池位置选择尤为重要 在自家别墅庭院中建造一座游泳池是很多人的梦想&#xff0c;因为有泳池家人健身起来是非常方便的&#xff0c;但是建造泳池选择合适的位置显得尤为关键&#xff0c;因为合适的选址可以带来美观性及在泳池的日常使用维护中也起到了很重要的作用。…

idea实现ssh远程连接服务器

1. 首先&#xff0c;打开idea&#xff0c;点击左上角File->settings 2. 点击tools->SSH Configurations->填写必要的信息&#xff0c;Host就是访问服务器的ip地址&#xff0c;Username就是服务器的用户账户&#xff0c;比如root&#xff0c;Password账户对应的密码&am…

如何克服应用程序性能监控( APM )面临的挑战

应用程序性能监控&#xff08;APM&#xff09;使组织能够监控性能 其关键业务应用程序的指标&#xff0c;在出现性能问题时及时收到警报&#xff0c;以及生成用于定期性能分析的报告。应用程序性能监视工具对于任何依赖应用程序的组织来说都是必不可少的&#xff0c;它可以帮助…

【渗透测试】常见文件上传漏洞处理与防范

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属的专栏&#xff1a;网络安全渗透 景天的主页&#xff1a;景天科技苑 文章目录 1.文件上传漏洞1.1. 描述1.2. 危害1.3. 有关文件上传的知识1.4…

VB购房系统-175-(代码+开题+文献综述+翻译+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword175 1/客户资料登记那张表上不能以客户身份证号作为主键&#xff0c;因为一般来看房的客户不会留下身份证号码&#xff0c;实施起来有难度&#xff0c;你可以设置一个自动编号字段&#xff0c;以这个字段来作为主键。…

电商数据分析|电商数据采集|Python数据采集|电商API接口数据采集系统搭建

电商API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;是指电商平台开放的一组数据接口&#xff0c;通过这些接口可以实现对电商平台商品、订单、物流等信息进行访问、查询、修改、删除等操作。电商API接口涉及到的主要数据包括&…