MySQL索引结构

MySQL --- 索引结构 mysql索引,B树,B+树,Hash索引 阅读详情

MySQL索引是什么

MySQL索引就是帮助MySQL高效获取数据的数据结构。

这个数据结构也就是我们常说的二叉树、红黑树、Hash表等索引数据结构,借助这样的数据结构,相较于之前的全局遍历查询,能够更高效的进行查询。

简单复习一下一些常见的索引数据结构:

二叉树

上图是一个二叉树,他根据我们存放数据的顺序依次填充这个树结构,比根节点小的数放到左边,比根节点大的放在右边,这样我们去查找的时候不需要遍历所有数据,只需要依次与根节点以及下面的子节点对比就可以查找到我们要找的元素。

 查找流程示例图:

根据这个动态图左上角的比对信息,可以很清楚的看到二叉树的查询逻辑,感兴趣的可以去这个网址实际模拟下:Data Structure Visualization

但是上述查询逻辑是在数据无大小规律存储的情况下进行查询的,如果我们的数据按照大小顺序存储会出现以下情况:这其实虽然叫二叉树但实际上已经是链表结构了,假如我们要查询较为底层的数据,还是要遍历全局。 

MySQL底层不是使用的二叉树结构。

红黑树

相较于上述的二叉树,红黑树做了相应的优化,他会根据存储的数据动态调整根节点保证树左右两边的平衡,红黑树也是一种平衡树。

下面来动态的看下他是如何存储数据的:

 可以明显的看到他动态调整树的结构,其实也就是减少了树的深度,相较于上面变为链式的二叉树,他的效率还是较高的,但是这仅仅适用于数据量不是很大的情况,如果数据量百万甚至千万,这个树的深度一样很深,查询起来效率依旧不高。所以MySQL底层也不是使用的红黑树结构。

那MySQL使用的那种数据结构来存储索引数据的呢?

B+Tree

MySQL底层其实是使用的B+Tree的数据结构存储的

这个结构相对于上述两种结构都有点复杂了,用更详细一点的图来表达可以这么看,他实际上还是树,但是一个树节点上不只有一个索引数据,只有最底层的叶子节点上才有数据(这个数据就是我们mysql表中的一列数据或者是mysql数据对应的磁盘地址),而其他节点只存储索引,也叫作冗余索引。

 这样的索引结构有什么好处呢?

在我们创建数据库索引的时候,他会自动帮我们建立这样的B+Tree数据结构,上图假如我们要查询30那条数据(select * from table where column = 30),这个column就是我们创建索引的那一列,这样他会把根节点加载到内存中,根据二分法或者其他方式查找到30对应的区间地址,因为在内存中的查找运算要比查询磁盘要快的多

然后相应的再往下找到30所在的区间位置,遍历最后一个叶子节点就可以获取到30那条数据

 那如果数据量过大,百万千万,树还会不会变得很深?

我们说树的查询效率取决于树的深度,那这个在千万级数据量下会不会还有二叉树和红黑树一样的问题呢?

其实没有了,B+Tree是可以设置树的最大深度的,我们假设深度设置为3,看看能进行多少量级的数据查询。

因为在前面的两层节点中只存储了索引数据和子节点的磁盘位置,大大节省了存储空间,每个节点的存储大小是由mysql设置的分页参数决定的:一般是16kb

ps:页是InnoDB访问的最小单位,默认16KB。缓冲池是以页为管理单位,每次读取或刷新一页数据。参数: innodb_page_size,可以将页大小设置为4K,8K.

SHOW GLOBAL STATUS LIKE 'Innodb_page_size';

 而一个索引数据假设我们用的bigInt占用8个字节,两个索引元素之间的空间是下个节点的磁盘空间地址,占用6个字节,也就是一个索引+节点地址占用14b,那么16kb的空间可以存储数据量是1170个索引,同理第二个层级的每个节点是也是可以存储1170个索引,最后一层也就是第三层的节点因为存储的是实际每一列的数据,假设每列数据占用1kb,那每个节点占存储16个索引数据。

整个树的数据存储量为1170*1170*16=21,902,400,是个两千万量级的数据量。完全满足大数据量的需求。

MySQL索引 二级索引:idx_name_age 包含了 name 与 age两个字段查询语句:select name,age from table where name = 'xxx'像上述这种情况,所需要查询的字段正是二级索引中所包含的字段,二级索引可以直接满足查询需求,所以这种情况下就无需再回表查询了。 阅读详情

相关推荐

Mysql之B+树索引详解(2)——数据页结构

本文重点介绍了数据页的结构,并没有大而全的对各个细节进行陈列,而是关注数据如何存储、如何查询,数据页如何组织等问题进行了探讨分析,希望读者有所收获。本文内容参考了大量互联网数据,未一一注明来源,如有涉及版权问题,请与我联系。

一步一步走 1022

数据结构MySQL —— 索引

索引概述、索引结构、索引分类、索引语法、SQL性能分析(慢查询日志、show profiles指令、explain执行计划)、索引使用规则以及索引设计原则

hdakj22的博客 6823

MySQL 索引结构

前言 在上一篇 MySQL 索引类型 中,我们已经了解了索引的基本概念以及分类,那么,索引的结构是什么样的?为什么索引可以这么快?这一篇文章将继续探讨索引的实现原理和数据结构。 文章目录前言索引数据结构二叉树的局限性B 树B+ 树 索引数据结构 首先我们要知道,由于为了实现持久化,只能将索引存储在硬盘上,通过索引来进行查询的时候就会产生硬盘的 I/O 操作,因此,设计索引时需要尽可能的减少查找次数,从而减少 I/O 耗时。 此外还需要知道一个很重要的原理,计算机系统对磁盘 I/O 会做预读优化,当一次I/O

wallace_www的博客 1万+

一文搞懂MySQL索引数据结构

前言 当我们在查询数据慢的情况下第一个想到的会是添加索引,索引在数据库的实际应用场景中十分常见,数据库的优化也离不开对索引的优化。而且索引相关的知识也是面试频率非常高的点之一,因此,本文将从基础理论出发,介绍MySQL按照逻辑角度的索引分类和实现。通过索引数据结构的实现原理阐述不同结构对建立索引带来的优劣势,希望通过这篇文章能给大家带来收获。 SQL执行慢的原因分析 磁盘空间不足、内存不足、I/O吞吐量小或者网络差等原因。 表没有创建索引或者索引已经失效。 分库分表也会带来SQL慢的原因 服务器调优及各.

养歌的博客 5900

PCI Express 权威指南:从协议原理到芯片实现

目录 全文总览第一部分:PCIe体系结构概览第1章 互连技术的演进与PCIe的诞生1.1 从ISA到PCI:并行总线的辉煌与瓶颈1.2 PCI-X的尝试与局限1.3 串行革命:从AGP、PCI到PCIe的范式转移1.4 PCIe的核心优势第2章 PCIe系统全局视角2.1 系统拓扑:Root Complex, Switch, Endpoint的职能与关系2.2 拓扑结构实例:服务器、工作站、嵌入式系统2.3 枚举与配置:系统如何发现和组织PCIe设备2.4 地址空间第3章 PCIe协议分层架构3.1 分层模

qq_42882296的博客 2894

Triton推理服务器实战:如何为PaddleOCR的ONNX模型配置动态批处理和并发推理

本文详细介绍了如何使用Triton推理服务器为PaddleOCR的ONNX模型配置动态批处理和并发推理,以提升GPU利用率和推理性能。通过实战案例和参数调优指南,帮助开发者解决高并发场景下的性能瓶颈问题,实现从实验室到生产环境的高效部署。

weixin_42527160的博客 426

MySQL索引详解之索引的数据结构

前言 很多人对数据库索引可能都是知其然却不知其所以然,对索引没有很深入的理解,在使用过程中也一知半解,导致没有办法准确高效地使用索引,甚至存在不少误用的情况,导致使用索引反而降低了系统的性能。下面就以MySQL索引为对象,通过几篇文章来带大家好好的学习下索引的知识。 索引的数据结构 索引的存储方式 索引的利弊以及高效使用 什么是索引 数据库索引指的是数据库管理系统中一个排序的数据结构,以协助快速查...

X先生说 7649

神州数码OSPF实战配置详解(手把手教学)

本文提供神州数码设备上OSPF基础配置的详细实战教程。通过搭建典型的两台三层交换机互联实验环境,手把手演示了VLAN创建、接口IP配置、OSPF进程启动、Router-ID设置及网络宣告等核心步骤,并分享了邻居状态验证、路由检查及常见排错方法,帮助网络工程师快速掌握神州数码OSPF的配置要点与操作技巧。

weixin_29210727的博客 79

mysql 之 索引结构

索引是帮助MySQL高效获取数据的数据结构MySQL在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据,这样我们就可以通过数据结构上实现的高级查找算法来快速找到我们想要的数据。而这种数据结构就是索引。

qq_33286757的博客 790

[附源码]计算机毕业设计Python财务管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程项目运行环境配置:Pychram社区版+py项目技术:django + python+ Vue 等等组成,B/S模式 +pychram管理等等。环境需要1.运行环境:最好是python3.7.7,我们在这个版本上开发的。其他版本理论上也可以。2.pycharm环境:pycharm都可以。推荐pycharm社区版;3.mysql环境:建议是用5.7版本均可。

巧灵计算机程序设计 1067

【报错】(pycharm运行程序)OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading

1 报错 OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading 2 分析原因 通过 activate Distance 进行自己创建的 Distance 虚拟环境中,输入python会显示环境中python的版本信息,再依次import,显然不会报错。 这是因为在Anaconda的环境下有支持 import torch 的 dll,而在PyCharm中使用的是自己创建的新环境,还缺少相应支持的dll,仅需在PyCharm中配置环境变量。.

静谧、淡雅 8623

Mysql索引的数据结构

索引(Index)是帮助MySQL高效获取数据的数据结构。索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法。索引是在存储引擎中实现的,因此每种存储引擎的索引不一定完全相同,并且每种存储引擎不一定支持所有索引类型,同时,存储引擎可以定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。有些存储引擎支持更多的索引个数和更大的索引长度。

走过冬季 1634

使用 MATLAB/Simulink 搭建一个步进电机细分控制系统的仿真模型

步进电机(Stepper Motor)是一种将电脉冲信号转换为角位移或线位移的执行元件,广泛应用于数控机床、3D打印、机器人、精密仪器等领域。其特点是开环控制、定位精度高、响应快、无累积误差。然而,传统步进电机在整步或半步运行时存在振动大、噪音高、转矩波动明显等问题。为了解决这些问题,细分控制技术被广泛采用。细分控制通过对绕组电流进行精确控制,使转子在两个整步之间实现平滑移动,从而提升电机的运行平稳性和位置精度。本教程将带你使用搭建一个步进电机细分控制系统的仿真模型,并通过仿真分析其。

amy_mhd的博客 427

MySQL--索引结构

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种:上述是MySQL中所支持的所有的索引结构,下面展示不同的存储引擎对于索引结构的支持情况。注意: 我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。

weixin_53066120的博客 1738

【教程4>第5章>第23节】基于FPGA的Gardner环实现——环路滤波器模块和Gardner环整体测试

1]黄凌.基于FPGA的QPSK全数字调制解调系统的设计与实现[D].南京航空航天大学[2025-02-02].DOI:10.7666/d.d166927.注意,这里包括一个NCO模块,一个内插模块,一个时偏误差检测模块,一个环路滤波器模块,在gardner环中,wk的反馈输入,变量为ww,从而构成了闭环。[4]李司.基于FPGA的数字接收机同步技术的研究与实现[D].北京交通大学[2025-02-02].DOI:10.7666/d.y1082455.:调整NCO的相位步长,控制采样时刻。

FPGA/MATLAB学习教程/源码/项目合作开发 853

用Virtuoso和Abstract完成gds2lef

需要用到的工具有virtuoso和abstract。 数模混合的项目通常需要模拟完成模块设计,把接去数字的pin打上label(text),数字的floorplan才能正式开始。 如果只需要简单的数字PR boundary和pin点位置,那么只使用virtuoso就够了,还想把模拟版图都转成lef就要用到abstract工具。 1.PR boundary+pin 1)在virtuoso中打开layout a) Gui操作: Create->P&R Objects->

m0_61544122的博客 8746

mysql多索引结构_MySQL 索引结构

谈到 MYSQL 索引服务端的同学应该是熟悉的不能再熟悉,新建表的时候怎么着都知道先来个主键索引,对于经常查询的列也会加个索引加快查询速度。那么 MYSQL 索引都有哪些类型呢?索引结构是什么样的呢?有了索引是如何检索数据的呢?我们围绕这些问题来探讨一下。你认为应该如何查询数据上一节谈到 InnoDB 引擎的时候聊过在 InnoDB 引擎是面向行存储的,数据都是存储在磁盘的数据页中,数据页里面按...

weixin_32147807的博客 688

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【MySQL索引 | 第1篇】索引介绍以及索引的结构

索引(index)是帮助 MySQL高效获取数据的数据结构有序。

serendipity_hky的博客 1035

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

mysql索引类型结构_MySQL 索引类型、索引结构、索引的操作

首页 专栏 mysql 文章详情0MySQL 索引类型、索引结构、索引的操作 小伍 发布于 1 月 24 日索引分类单列索引:一个索引只包含一个列。ALTER TABLE table_name ADD INDEX index_name (col);复合索引:一个索引包含多个列。ALTER TABLE table_name ADD INDEX index_name (col1, col2);索引类型...

weixin_32799203的博客 127

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

探究MySQL的索引结构选型

本文将探究MySQL索引结构的技术选型,分析哈希表、二叉搜索树、AVL树、红黑树、B树与B+树各自的优缺点。解释了MySQL最终选择B+树作为其索引的组织方式的原因,并在最后增加了3道常问的面试题。

阳阳的博客 5527

MySQL索引数据结构

平衡树虽然解决了数据单调递增或者递减时导致退化为链表的问题,但是在插入时,需要频繁的旋转来保持二叉树的平衡,对于插入修改的性能影响极大。产生的原因是3节点的右子节点多了一个左子节点,此时将5节点右旋后再将3节点左旋解决。右旋的流程为(当前节点为3节点,右旋就是让自己变成右子节点)每个节点的值比左子树所有节点的值大,比右子树所有节点的值小。每个节点比左子树所有节点的值大,比右子树所有节点的值小。每个节点到叶子节点的每个路径黑色节点的个数都相等。每个节点的左子树的高度与右子树的高度差不超过1。

GzlAndy的博客 1467

MySQL —— MySQL索引介绍、索引数据结构、聚集索引和辅助索引、索引覆盖

回想一下,如果查询只需要扫描索引而无须回表,将带来诸多好处。

longool的博客 1392

MySQL之索引数据结构分析

索引是一种数据结构,可以帮助我们快速的进行数据的查找索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash 索引,B+ 树索引等,而我们经常使用的InnoDBB+ 树索引。

上善若泪 2081

Mysql之索引:索引结构+索引分类+索引语法

索引概述、优缺点、索引结构、B Tree(多路平衡查找树)、B+Tree、Hash、特点、为什么InnoDB存储引擎选择使用B+tree索引结构?、索引分类、索引语法

a289246的博客 1388
上一篇: JVM初学 GC
下一篇: SpringBoot统一收集异常信息并返回给前端
knowwait
博客等级 码龄9年 34粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值