当前位置: 首页 > article >正文

MySQL 索引介绍

本文章讲解 Hash、二叉树、平衡二叉树、B-Tree、BTree 索引的逻辑情况查找都是索引操作当数据量较大时索引的大小可能有几个 G甚至更多为了减少索引在内存的占用数据库索引是存储在磁盘上的将索引以及索引对应的数据页从磁盘加载到内存中的过程是很花费时间的进行索引查询的时候不可能把整个索引全部加载到内存只能逐一加载站在 MySQL 的角度上磁盘的 I/O 操作次数对索引的使用效率至关重要如果索引的数据结构尽量减少硬盘的 I/O 操作对应消耗的时间也就越小常见的加速查找的数据结构有两类树如平衡二叉搜索树查询/插入/修改/删除的平均时间复杂度都是 O(log2N)哈希如HashMap查询/插入/修改/删除的平均时间复杂度都是 O(1)Hash 索引Hash 本身是一个函数被称为散列函数。Hash 算法是通过某种确定性的算法如MD5、SHA1 等将输入转变为输出。相同的输入永远可以得到相同的输出假设输入内容有微小偏差在输出时通常会有不同的结果举例要验证两个文件是否相同时不需要把两份文件直接拿来比对只需用 Hash 函数对两份文件进行计算最后比较这两个 Hash 函数的结果是否相同即可知道这两个文件是否相同采用 Hash 进行检索效率非常高基本上一次检索就可以找到数据而 B树需要自上向下依次查找多次访问节点才能找到数据中间需要多次 I/O 操作从效率来说 Hash 比 B树更快但索引结构并没有设计成 Hash 型原因如下Hash 索引只支持等值、、IN 查询不支持范围查询Hash 索引存储数据时没有顺序的在 ORDER BY 的情况下 Hash 索引还需要对数据重新排序对于联合索引的情况Hash 值是将联合索引键合并后一起来计算的无法对单独的一个键或者几个索引键进行查询对于等值查询来说Hash 索引的效率更高但如果索引列的重复值很多效率就会降低因为遇到 Hash 冲突时需要遍历指针来进行比较找到查询的关键字是非常耗时的所以 Hash 索引通常不会用到重复值多的列上InnoDB 本身不支持 Hash 索引但是提供自适应 Hash 索引如果某个数据被频繁查询就会将这个数据页的地址存放到 Hash 表中下次查询的时候就可以直接找到这个页面的所在位置这样让 B树也具备了 Hash 索引的优点show variables like%adaptive_hash_index;# 查看是否开启自适应 Hash# ON已启用自适应哈希索引功能默认值# OFF已关闭自适应哈希索引功能二叉搜索树如果利用二叉树作为索引结构那么磁盘的 IO 次数和索引树的高度是相关的二叉搜索树的特点1.1. 一个节点只能有两个子节点也就是一个节点度不能超过21.2. 左子节点 本节点 右子节点比我大的向右比我小的向左查找规则搜索某个节点和插入节点的规则一样假设搜索插入的数值为 key2.1. 如果 key 大于根节点则在右子树中进行查找2.2. 如果 key 小于根节点则在左子树中进行查找2.3. 如果 key 等于根节点也就是找到了这个节点返回根节点即可2.4. 查找方式如下如果二叉树的深度非常大则需要多次比较才能找到节点如下图所示为了提高查询效率需要减少磁盘 IO 次数尽量降低树的高度把原来瘦高的树结构变的矮胖树的每层的分叉越多越好平衡二叉树平衡二又树又称为 AVL 树。它的左右两个子树的高度差的绝对值不超过1并且左右两个子树都是一棵平衡二叉树在二叉搜索树的基础上增加了约束常见的平衡二叉树有很多种包括了平衡二叉搜索树、红黑树、数堆、伸展树。而平衡二叉树是最早提出来的自平衡二叉搜索树一般提到的平衡二叉树指的就是平衡二叉搜索树数据查询的时间主要依赖于磁盘 I/O 的次数如果采用二叉树的形式即使通过平衡二叉搜索树进行了改进树的深度也是 O(log2n)当 n 比较大时深度也是比较高的比如下图的情况每访问一次节点就需要进行一次磁盘 I/O 操作对于上面的树来说需要进行5次 I/O 操作,虽然平衡二叉树的效率高但是树的深度也同样高这就意味着磁盘 I/O 操作次数多会影响整体数据查询的效率缺点一个节点最多分裂出两个字节点树的高度太高导致IO次数过多节点中只保存了一个关键字保存的内容太少如果把二叉树改成 M 3 时同样的3个节点可以由三叉树来进行存储B-TreeB 树简写为 B-Tree横杠表示这两个单词连起来的意思即多路平衡查找树。它的高度远小于平衡二叉树的高度。结构如下图所示假设要查找的关键字是9步骤如下与根节点的关键字 (1735) 进行比较9小于17得到指针 P1按照指针 P1 找到磁盘块2关键字为 (812)因为9在8和12之间得到指针 P2按照指针 P2 找到磁盘块6关键字为 (910)找到了关键字9如果查找的是 17直接在根节点就可以查到结果优点B 树的节点既存储索引也存储数据如果将频繁访问的数据放到根节点附近就会大大的提高热数据查询的效率缺点B 树中每个节点既存储索引也存储数据当数据比较大时候会导致每个节点存储的 key 变少了就会导致 B 树的层数变高增加 IO 次数BTreeMySQL 默认使用 Btree 索引是基于 B-Tree 做出的改进B树和 B 树的差异在于以下几点● 有 k 个孩子节点就有 k 个关键字即孩子数量 关键字数而 B 树中孩子数量 关键字数 1● 非叶子节点的关键字也会同时存在在子节点中并且是在子节点中所有关键字的最大或最小● 非叶子节点仅用于索引不保存数据记录和记录有关的信息都放在叶子节点中而 B 树中的非叶子节点既可以保存索引也可以保存数据记录● 所有关键字都在叶子节点出现叶子节点构成一个有序的双向链表如图所示B 树和 B树的区别B树的中间节点并不直接存储数据因为 B树每次只有访问到叶子节点才能找到对应的数据而 B树中非叶子节点也会存储数据会造成查询效率不稳定的情况有时访问到非叶子节点就可以找到关键字有时需要访问到叶子节点才能找到关键字缺少系统性。而且在 B树的角度上看非叶子节点完全可以存储更多数据页的目录项记录这样可以关联到更多的用户记录其次B树的查询效率更高因为通常 B树比 B 树更矮胖阶数更大深度更低查询所需要的磁盘 I/O 也会更少同样的磁盘页大小B树可以存储更多的节点关键字在查询范围上B树的效率也比 B 树高。因为所有关键字都出现在 B树的叶子节点中叶子节点之间会有指针数据又是递增的使得范围查找可以通过指针连接查找而 B 树则需要遍历才能完成范围的查找效率要低很多B 树和 B树都可以作为索引的数据结构在 MySQL 中采用的是 B树但 B 树和 B树各有自己的应用场景不能说 B树完全比 B 树好思考为了减少 I/O索引树是否会一次性加载数据库索引是存储在磁盘上的如果数据量很大必然导致索引的大小也会很大可能会有好几个 G当使用索引查询时候是不可能将全部几个 G 的索引都加载进内存的只能是逐一加载每一个磁盘页因为磁盘页对应着索引树的节点B树的存储能力如何为何说一般查找行记录最多只需1~3次磁盘 I/OInnoDB 存储引擎中页的大小为 16KB一般表的主键类型为 INT占用4个字节或 BIGINT占用8个字节指针类型也一般为4或8个字节也就是说一个页BTree 中的一个节点中大概存储 16KB / (8B8B) 16384B / 16B 1024 个键值假设这里的 K 取值为10^3也就是说一个深度为3的 B树索引可以维护 10^3 * 10^3 * 10^3 10 亿条记录假设一个数据页也存储10^3条行记录数据实际情况中每个节点可能不能填充满因此在数据库中BTree 的高度一般都在2~4层MySQL 的 InnoDB 存储引擎在设计时是将根节点常驻内存的也就是说查找某一键值的行记录时最多只需要1~3次磁盘 I/O 操作小结使用索引可以从海量的数据中快速定位想要查找的数据不过索引也存在一些不足比如占用存储空间、降低数据库写操作的性能等如果有多个索引还会增加索引选择的时间。使用索引时需要平衡索引的利提升查询效率和弊维护索引所需的代价在实际工作中还需要基于需求和数据本身的分布情况来确定是否使用索引尽管索引不是万能的但数据量大的时候不使用索引是不可想象的毕竟索引的本质就是提升数据检索的效率

相关文章:

MySQL 索引介绍

本文章讲解 Hash、二叉树、平衡二叉树、B-Tree、BTree 索引的逻辑情况 查找都是索引操作,当数据量较大时,索引的大小可能有几个 G,甚至更多,为了减少索引在内存的占用,数据库索引是存储在磁盘上的,将索引以…...

Qwen-Image-Edit-F2P镜像免配置价值:省去diffusers/transformers手动安装

Qwen-Image-Edit-F2P镜像免配置价值:省去diffusers/transformers手动安装 想玩转AI图像生成和编辑,但被复杂的模型部署、环境配置劝退?这大概是很多开发者和AI爱好者的共同烦恼。手动安装diffusers、transformers库,处理各种依赖…...

如何用AI打造原创OC角色?2026从角色设定到动态生成的全链路创作指南

在原创角色OC创作中,AI已成为核心动力,打破“想法难落地、技术门槛高”的困境。想打造有灵魂、还原度高的角色,关键在于顺畅完成“概念设定→视觉落地→动态赋能→精细打磨”。V2Fun.art凭借全流程整合、低门槛操作和高适配性,成为…...

nli-MiniLM2-L6-H768快速上手:金融研报摘要主题分类(科技/宏观/行业)

nli-MiniLM2-L6-H768快速上手:金融研报摘要主题分类(科技/宏观/行业) 1. 工具简介 nli-MiniLM2-L6-H768是一款基于cross-encoder/nli-MiniLM2-L6-H768轻量级NLI模型开发的本地零样本文本分类工具。它专为解决传统文本分类需要大量标注数据和…...

颠覆传统巡检模式:AI技术如何重塑安全生产新格局

作为"我ai去巡检"小程序的技术研发团队,我们亲眼见证了人工智能如何从实验室概念转变为守护安全生产的核心力量。今天,我们将深入剖析AI技术在安全生产领域的前沿应用,揭秘我们如何攻克技术难题,打造这款重新定义行业标…...

Spring Security配置了AccessDeniedHandler却无效?别急,先检查你的全局异常处理器

Spring Security异常处理冲突排查指南:当AccessDeniedHandler遇上全局异常处理器 最近在重构一个老项目的权限模块时,遇到了一个看似简单却让人抓狂的问题:明明按照文档配置了AccessDeniedHandler,但权限不足时依然直接抛出Access…...

踩坑实录:NFS挂载环境下脚本执行权限问题(Operation not permitted)的深度排查与解决

在企业级部署中,NFS(网络文件系统)常被用来共享存储资源,方便多节点统一访问数据与安装包。但这种“便捷共享”的环境,也常常隐藏着各种权限陷阱。最近在KingbaseES数据库安装部署中,我就踩了一个典型的NFS…...

微软office365怎么安装?(保姆级流程)

1、微软office官网(www.office.com)--登录(报名后老师给的账号)2、登录后的界面3、应用--安装应用程序--Microsoft 365应用版4、下载office软件安装程序到桌面(或者你能找到的地方)5、找到安装程序并双击安…...

LFM2.5-VL-1.6B惊艳效果展示:OCR文档理解+结构化信息提取真实案例

LFM2.5-VL-1.6B惊艳效果展示:OCR文档理解结构化信息提取真实案例 1. 模型概述 LFM2.5-VL-1.6B是由Liquid AI推出的轻量级多模态大模型,专为端侧和边缘设备优化设计。这个1.6B参数的视觉语言模型(1.2B语言400M视觉)在保持轻量化的…...

ECS LIVA Mini Box QC710 ARM迷你主机评测与购买指南

1. ECS LIVA Mini Box QC710 迷你主机深度解析 最近在Stack Social平台上发现一款正在清仓促销的迷你主机——ECS LIVA Mini Box QC710,原价219美元现在仅售99.99美元。这款基于高通骁龙7c平台的迷你电脑在2021年推出时定位为开发者套件,如今价格腰斩后是…...

桥梁健康监测系统如何选?海陵区城市生命线项目中标单位为您解读

桥梁作为城市交通网络的关键节点,其结构安全状态直接关系到市民出行安全和城市运转效率。近年来,国内外多起桥梁安全事故为我们敲响了警钟,桥梁健康监测系统已成为城市生命线安全工程中不可或缺的重要组成部分。江苏星文科技有限公司作为海陵…...

数据库三大范式:从概念到实战,一篇文章彻底搞懂

为什么你的表设计总出问题?为什么数据冗余、更新异常、插入异常、删除异常频频发生?很可能是范式没用好。今天我们用最通俗的语言,把这三大范式讲清楚、讲透彻。数据库设计是一门艺术,而范式就是这门艺术的“基本法”。掌握三大范…...

基于安卓的农村劳动力信息匹配系统毕设

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一种基于安卓平台的农村劳动力信息匹配系统以解决当前农村劳动力市场中存在的信息不对称与供需错配问题。随着我国城镇化进程的持续推进以及…...

Flux2-Klein-9B-True-V2多场景落地:政府宣传海报/公益广告图生成实践

Flux2-Klein-9B-True-V2多场景落地:政府宣传海报/公益广告图生成实践 1. 项目概述 Flux2-Klein-9B-True-V2是基于官方FLUX.2 [klein] 9B改进的文生图/图生图模型,专为高质量图像生成与编辑任务优化。该模型在保持原始模型强大生成能力的基础上&#xf…...

灵机一物AI原生电商小程序、PC端(已上线)-从 Vibe Coding 到 Wish Coding:AI 编程范式跃迁与蚂蚁灵光技术解读

摘要本文对比 Vibe Coding 与 Wish Coding 技术路径,解析蚂蚁灵光闪应用升级要点、灵光圈协作机制,探讨 Coding Agent 从开发者工具走向全民消费级产品的行业趋势。1. Vibe Coding 定位与边界1.1 核心逻辑- 面向:专业开发者- 入口&#xff1a…...

Phi-3.5-mini-instruct入门必看:网页封装+参数详解+中文场景调优指南

Phi-3.5-mini-instruct入门必看:网页封装参数详解中文场景调优指南 1. 模型简介 Phi-3.5-mini-instruct是一款专为中文场景优化的轻量级文本生成模型,特别适合日常问答、内容创作和知识辅助等任务。相比大型语言模型,它在保持良好生成质量的…...

XSKY 与平凯星辰(TiDB)完成联合解决方案互认证,存储+数据库联合交付能力再获验证

近日,XSKY 星辰天合与平凯星辰(北京)科技有限公司正式完成联合解决方案互认证。本次认证覆盖 XSKY 旗下 XEBS V6(星飞极速版)、XHERE V6(星飞极速版)、XEDP V6 三款核心产品与平凯星辰的平凯数据…...

告别变量地狱:手把手教你用Simulink结构体管理复杂模型参数(附实战案例)

告别变量地狱:手把手教你用Simulink结构体管理复杂模型参数(附实战案例) 打开一个大型Simulink模型时,你是否曾被工作区里密密麻麻的变量列表吓到?Gain_A、Offset_B、Init_C...这些看似有规律的命名,随着模…...

【Docker 27跨架构镜像转换终极指南】:20年DevOps专家亲授arm64/x86双平台无缝构建与推送实战

第一章:Docker 27跨架构镜像转换的核心演进与定位Docker 27 引入了原生集成的 docker buildx bake 与增强版 buildkit 调度器,将跨架构镜像构建从“多阶段手动交叉编译”推进至“声明式统一构建流水线”。其核心演进体现在三方面:构建上下文感…...

二维DFT图像频域分析:从基础原理到实战应用

前言 一维DFT我们已经玩明白了,知道它能把复杂信号拆成一堆正弦波。那二维DFT呢?简单说,就是把这个“拆解魔法”搬到了图像上。一张图片,其实也可以看作是二维信号,二维DFT就能把它拆解成无数个不同方向、不同频率的二…...

2026口碑靠前的备考增强记忆品牌榜单

这份口碑靠前的备考增强记忆品牌榜单是结合成分合规性、市场口碑、权威认证、场景适配性多个维度整理得出,能给备考人群选择脑营养补充产品提供清晰可靠的参考方向。这份口碑靠前的备考增强记忆品牌榜单的评选维度是什么?本次评选围绕三个核心指标筛选&a…...

【仅限持牌机构内部流通】:Docker 27金融隔离黄金配置矩阵(含Kubernetes 1.30+PodSecurity Admission适配表、FIPS 140-3认证路径)

第一章:Docker 27金融交易数据容器隔离概览在高并发、低延迟的金融交易系统中,数据隔离不仅是安全合规的核心要求,更是防止跨业务线干扰、保障交易一致性与审计可追溯性的基础设施能力。Docker 27(即 Docker Engine v27.x&#xf…...

谷歌Next年度大会智能体登场,OpenAI/微美全息构筑“AI芯片+智能体”生态受瞩目

北京时间周四,美国云服务巨头谷歌(GOOG.US)举行2026 Next大会,发布了旨在推动企业工作流程全面转向智能体的“代理式企业”(Agentic Enterprise)技术栈,涵盖第八代TPU、智能体软件平台等一系列前…...

Hive 技术文章大纲

Hive 技术文章大纲1. Hive 简介Hive 的定义及其在大数据生态系统中的角色Hive 与关系型数据库的区别Hive 的主要特点(如 SQL 兼容性、扩展性、批处理能力)2. Hive 架构与核心组件Hive 的整体架构(Metastore、Driver、Compiler、Executor 等&a…...

打破次元壁:在华为Pura X Max上体验华为阅读独家AI动态漫画力量!

作为一名长期混迹数码圈的科技博主,我本以为屏幕折叠、刷新率卷到头后,手机的阅读体验很难再有质的飞跃。但4月20日发布的华为Pura X Max,配合新升级的华为阅读最新独家技术,确实给了我一点小小的“鸿蒙震撼”。大家平时看漫画&am…...

别再手动配环境了!用CMake+VS2022一键搞定PCL点云库(附完整项目模板)

现代C点云开发实战:基于CMake与VS2022的PCL高效配置指南 点云处理已成为计算机视觉、自动驾驶和三维重建领域的核心技术之一。对于C开发者而言,Point Cloud Library (PCL)提供了强大的工具集,但传统的配置方式往往令人望而生畏——手动设置包…...

广州海珠智能体案例中的“咨询+干预+随访”多智能体协作:医疗AI从“单点工具”到“执行系统”的范式转移

引言:从“工具”到“系统”的范式转移在过去的几年中,人工智能在医疗领域的应用取得了显著进展。从辅助医生识别肺结节的影像系统,到自动生成电子病历的自然语言处理工具,AI技术正逐步渗透到诊疗的各个环节。然而,这些…...

千问3.5-9B在C语言教学中的应用:代码分析与调试助手

千问3.5-9B在C语言教学中的应用:代码分析与调试助手 1. 引言:编程教学的新帮手 "老师,我这个程序为什么运行不了?"——这句话可能是每个C语言课程助教最常听到的提问。传统编程教学中,教师需要面对大量基础…...

3分钟解决C盘爆红问题:WindowsCleaner终极清理指南

3分钟解决C盘爆红问题:WindowsCleaner终极清理指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为Windows系统越用越慢而烦恼吗?当…...

Phi-3.5-mini-instruct开源可部署指南:自主可控的轻量级AI代码助手

Phi-3.5-mini-instruct开源可部署指南:自主可控的轻量级AI代码助手 1. 项目介绍 Phi-3.5-mini-instruct是微软推出的轻量级开源指令微调大模型,在代码理解和多语言任务上表现优异。这个模型特别适合作为本地AI代码助手使用,能够在单张RTX 4…...