网易首页 > 网易号 > 正文 申请入驻

MySQL索引揭秘:图书馆找书法助你理解B+树

0
分享至



作为MySQL初学者,你有没有过这样的困惑?

同样是查数据,别人写的SQL一秒出结果,你的却要等半天,甚至卡死?明明是一样的表、一样的查询条件,差距咋就这么大?

其实答案很简单——有没有用对「索引」

很多新手一听到“索引”“B+树”就头大,觉得是高深的技术名词,不敢碰也看不懂。但今天我敢说,只要你去过图书馆、逛过超市,就能轻松搞懂这两个概念,甚至能说清“索引为啥能让查询变快”。

全程无复杂术语,全是日常生活类比,新手直接冲就完事儿了!

先搞懂:没有索引,MySQL查数据就像“瞎找东西”

咱们先从“没有索引”的场景说起,你就知道索引有多重要了。

假设你去超市买一瓶可乐,超市里没有任何货架指引、没有价签分类,所有商品乱七八糟堆在一起——饮料、零食、日用品混放,甚至可乐可能在生鲜区、在洗漱区,也可能在最角落的货架上。

你想找到可乐,只能从超市入口开始,一排一排货架、一件一件商品翻过去,直到找到为止。运气好可能翻几分钟,运气差说不定要把整个超市翻一遍。

这就是MySQL没有索引时的“全表扫描”——数据在表中杂乱无章地存储,MySQL要查一条数据,只能从第一条开始,一条一条遍历,直到找到目标值。数据越多,遍历的时间越长,查询就越慢。

再举个更贴切的例子:你有一本1000页的小说,想找其中一句“山高水远,万事顺意”,但书没有目录,你只能从第1页开始,逐字逐句翻,直到找到这句话。

索引,就是这本小说的目录,就是超市的货架指引——它不存储实际的内容(小说正文、商品),但能告诉你“目标内容在哪个位置”,让你跳过无关内容,直接定位到目标。

重点来了:B+树,就是MySQL索引的“智能目录”

知道了索引是“目录”,那这个“目录”是怎么设计的?为什么它能让查询快到飞起?

答案就是:MySQL的索引,底层用的是「B+树」结构。而B+树的设计,完美贴合了“快速找东西”的日常逻辑,咱们用图书馆找书的例子,一步步讲透它的结构。

假设你去一个超大图书馆,要找一本“书号为177”的书,图书馆的目录系统,就是一个简化版的B+树,它分为3层,每一层都有明确的分工:

  • 第一层:图书馆入口的总指引(B+树的「根节点」)

你刚进图书馆,门口有一块大屏幕,上面只显示“书号范围”和“对应的楼层”,没有具体的书名,比如:

书号1-100 → 2楼 | 书号101-200 → 3楼 | 书号201-300 → 4楼

这个大屏幕的作用,就是“粗筛范围”——它不告诉你书具体在哪个货架,只告诉你“该去哪个楼层找”,帮你排除掉所有无关的楼层(比如你找177,直接排除2楼、4楼,只去3楼)。

这对应B+树的「根节点」:不存储实际数据,只存储“索引范围”,负责指引你到下一层,相当于“一级目录”。

  • 第二层:楼层的分区指引(B+树的「分支节点」)

你根据入口指引,走到3楼,发现3楼也有一个指引牌,上面把“101-200”的书号再细分:

书号101-150 → A区货架 | 书号151-200 → B区货架

这个指引牌的作用,是“细化范围”——把3楼的书号再拆分,帮你定位到具体的货架区域(你找177,直接去B区,不用逛A区)。

这对应B+树的「分支节点」(也叫内部节点):同样不存储实际数据,只存储更细的索引范围,继续指引你到下一层,相当于“二级目录”。

  • 第三层:货架上的书籍(B+树的「叶子节点」)

你走到3楼B区货架,发现货架上的书,全部按书号从小到大整齐排列:151、152、153……177、178、179……而且货架之间有箭头连接,从151可以一直顺到200,不用回头找。

这就是B+树的「叶子节点」:所有实际数据(书籍)都存在这里,而且数据是有序排列的,叶子节点之间还通过“指针”连成链表,相当于“目录指向的具体页码”。

到这里,你找书的过程就结束了:入口总指引(根节点)→ 楼层分区指引(分支节点)→ 货架找书(叶子节点),总共3步,就能找到目标书籍,不用翻遍整个图书馆。

终于懂了:B+树为啥能让索引“快到飞起”?

结合上面的图书馆例子,咱们总结3个核心原因,新手也能一听就懂,这也是MySQL选择B+树做索引的关键理由:

  • 1. 层级少,“找东西”的步骤极少(减少磁盘IO)

B+树是“多路平衡树”,不是咱们印象中“一个节点分两个叉”的二叉树。就像图书馆的指引,一层能分很多个范围(比如根节点分3个楼层,分支节点分2个区域),而不是只分两个。

这就导致B+树的“高度”非常低——哪怕有100万条数据,B+树也只有3-4层,相当于找书只需要上3-4层楼,步骤极少。

要知道,MySQL的数据存在磁盘上,“查数据”本质就是“从磁盘读数据”,每读一层节点,就是一次磁盘IO(相当于上一层楼)。B+树层级少,磁盘IO次数就少,查询自然就快。

对比一下:如果用二叉树做索引,100万条数据要分20多层,相当于上20多层楼找书,效率差太多了[7]。

  • 2. 非叶子节点只存“指引”,不存“数据”,更紧凑

B+树的根节点和分支节点,只存“索引范围”(比如书号区间),不存实际数据(书籍、MySQL行数据)。就像图书馆的指引牌,只写“书号范围”,不摆书籍,这样一个指引牌能写更多的范围,一层能覆盖更多的内容[2]。

举个例子:一个节点如果存实际数据,可能只能存10条;但如果只存索引范围,能存1000条。这样一来,B+树的层级就能进一步降低,找东西的步骤更少。

而B树(B+树的前身)的缺点就是“每个节点既存指引又存数据”,就像图书馆每层既放指引牌又放书,导致指引牌能写的范围变少,楼层变多,找书更慢[2]。

  • 3. 叶子节点有序且连表,范围查询更高效

B+树的所有叶子节点,都是按索引顺序排列的,而且叶子节点之间有链表连接(就像图书馆货架的箭头)。这意味着,不仅“找单个目标”快,“找一个范围”也快[6]。

比如你想找“书号150-200”的所有书,不用再回到入口重新找,只要找到150,顺着货架的箭头(叶子节点链表),就能一次性把150到200的书都找完,不用回头。

对应到MySQL,就是查询“age between 20 and 30”这样的范围语句时,B+树能直接定位到第一个符合条件的节点,然后顺着链表遍历,效率极高。而哈希索引、二叉树都做不到这一点[4]。

初学者必看:2个关键提醒(避坑)

搞懂了B+树和索引的原理,最后再给新手两个小提醒,避免踩坑:

1. 索引不是越多越好:就像图书馆的目录太多,反而会增加查找目录的时间。MySQL建太多索引,会占用额外的存储空间,而且新增、修改、删除数据时,还要同步更新所有索引(相当于图书馆新增书籍,要更新所有指引牌),反而变慢[4]。

2. 索引不是万能的:如果你的查询条件是“模糊查询开头”(比如like '%可乐'),或者查询字段做了运算(比如age+1=25),索引会失效,MySQL还是会“全表扫描”,就像你拿着模糊的书名,哪怕有目录也没用[4]。

最后总结(新手必记)

其实MySQL索引和B+树,一点都不复杂:

✅ 索引 = 图书馆目录,帮你跳过无关数据,直接定位目标;

✅ B+树 = 智能目录结构,分3-4层,层级少、指引清,找东西更快;

✅ 索引快的本质 = 减少“翻找次数”(磁盘IO),让查询一步到位。

对于初学者来说,不用死记硬背B+树的专业定义,只要记住“图书馆找书”的类比,就能理解索引的核心逻辑。后续不管是建索引、优化SQL,都能有清晰的思路。

如果觉得这篇文章能看懂,记得收藏起来,下次被“索引为啥快”问住时,直接拿这篇类比给他看~

声明:个人原创,仅供参考

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
蚕豆被点名!医生发现:吃得越多,血糖高患者寿命或越短?真的吗

蚕豆被点名!医生发现:吃得越多,血糖高患者寿命或越短?真的吗

路医生健康科普
2026-05-11 17:37:44
想安稳活到81岁?66岁起,两性关系这8句一定要听进去

想安稳活到81岁?66岁起,两性关系这8句一定要听进去

新时代的两性情感
2026-04-24 12:36:15
张凌赫爆红后《刺棠》女主换人!王玉雯被资本抛弃,田曦薇捡漏?

张凌赫爆红后《刺棠》女主换人!王玉雯被资本抛弃,田曦薇捡漏?

手工制作阿歼
2026-05-10 20:46:17
胎压2.5是谎言?干了十年汽修,我来告诉你真正的标准!

胎压2.5是谎言?干了十年汽修,我来告诉你真正的标准!

娱乐圈的笔娱君
2026-05-10 01:52:36
失去中国市场,世界杯一文不值,国际足联为何还敢对华发动价格战

失去中国市场,世界杯一文不值,国际足联为何还敢对华发动价格战

林子说事
2026-05-11 19:19:47
58岁周涛首次参加真人秀,自称公司董事长,二婚嫁富商女儿已14岁

58岁周涛首次参加真人秀,自称公司董事长,二婚嫁富商女儿已14岁

八斗小先生
2026-05-11 18:44:51
喜讯!申花三位久违强援有望在中超第12轮复出,目标带队拿三分

喜讯!申花三位久违强援有望在中超第12轮复出,目标带队拿三分

阿心文史
2026-05-11 14:47:15
林志玲被曝日本“拍片”?拍摄片段流出,网友:女神怎么沦落成这样

林志玲被曝日本“拍片”?拍摄片段流出,网友:女神怎么沦落成这样

八卦王者
2026-05-10 13:32:20
王大雷调侃:我只记得我们是2-0;玉宁那个进球真的太漂亮了

王大雷调侃:我只记得我们是2-0;玉宁那个进球真的太漂亮了

懂球帝
2026-05-11 09:20:10
国乒女队夺冠57万,奖金分配:莎莎20万王曼昱14万蒯曼6万

国乒女队夺冠57万,奖金分配:莎莎20万王曼昱14万蒯曼6万

刘笤说体坛
2026-05-11 09:07:41
张本宇又生气了,不是儿女在亚洲杯零冠收场,而是他们身份的尴尬

张本宇又生气了,不是儿女在亚洲杯零冠收场,而是他们身份的尴尬

大汉体育解说
2026-02-09 13:07:34
18年沧桑!曼联08欧冠冠军阵容今何在?有人成主帅有人还在踢

18年沧桑!曼联08欧冠冠军阵容今何在?有人成主帅有人还在踢

余飩搞笑段子
2026-05-11 07:32:05
第12顺位又如何?这队选了4个潜力股,1人成全明星,今年继续挖宝

第12顺位又如何?这队选了4个潜力股,1人成全明星,今年继续挖宝

禾三千体育
2026-05-11 21:18:09
赢球进世少赛!U17女足VS印度首发:换6人冲4强 黄沁怡、杨兰先发

赢球进世少赛!U17女足VS印度首发:换6人冲4强 黄沁怡、杨兰先发

我爱英超
2026-05-11 18:34:50
王志文安排好后事仅4月,担心事发生,私生活被扒,王宝强拒和解

王志文安排好后事仅4月,担心事发生,私生活被扒,王宝强拒和解

白面书誏
2026-04-16 18:04:33
求救也晚了,伊朗宣布对美舰开火,话音刚落,土耳其摆出洲际导弹

求救也晚了,伊朗宣布对美舰开火,话音刚落,土耳其摆出洲际导弹

潮鹿逐梦
2026-05-09 18:49:49
黑尾酱,彻底消失了?

黑尾酱,彻底消失了?

生如稗草
2026-03-15 08:48:11
跌30%!上海明星板块,也撑不住了?

跌30%!上海明星板块,也撑不住了?

新浪财经
2026-05-11 20:08:13
深圳楼市再爆发

深圳楼市再爆发

睿见投资
2026-05-11 19:45:06
“央视一哥”康辉:丁克半辈子,却因四十岁接到的一通电话后悔了

“央视一哥”康辉:丁克半辈子,却因四十岁接到的一通电话后悔了

琴琴有氧运动
2026-05-09 11:32:22
2026-05-11 22:07:00
小白编程指南
小白编程指南
零基础学编程,分享代码入门教程、实战案例、常用代码片段,带你轻松上手写代码,从小白进阶编程达人。
1文章数 1关注度
往期回顾 全部

科技要闻

黄仁勋:你们赶上了一代人一次的大机会

头条要闻

母女二人一年用水量高达400多吨 警方发现背后隐情

头条要闻

母女二人一年用水量高达400多吨 警方发现背后隐情

体育要闻

梁靖崑:可能是最后一届了,想让大家记住这个我

娱乐要闻

“孕妇坠崖案”王暖暖称被霸凌协商解约

财经要闻

宗馥莉罢免销售负责人 部分业务将外包

汽车要闻

吉利银河“TT”申报图曝光 电动尾翼+激光雷达

态度原创

本地
时尚
教育
艺术
公开课

本地新闻

用苏绣的方式,打开江西婺源

夏天来了!还是这些穿搭最适合普通人照搬,简单舒适又日常

教育要闻

亲子欢乐跑刷屏全网!被家长们的评价暖哭了……

艺术要闻

陆抑非写竹,笔力遒劲

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版