读书笔记:白话解读B*树索引:数据库中的"图书管理员"

我们的文章会在微信公众号IT民工的龙马人生博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

白话解读B*树索引:数据库中的"图书管理员"

想象一下,你走进一个巨大的图书馆,里面有上千万本书。如果没有索引,找一本书就像大海捞针。而B*树索引就像是这个图书馆里最聪明的图书管理员,它能帮你快速找到任何一本书。

索引是怎么工作的?

这个"图书管理员"(B*树索引)的工作方式很聪明:

  1. 它把图书信息整理成树状结构:最顶层是总目录(根块),中间是分区目录(分支块),最底层是详细书架信息(叶块)
  2. 每个叶块都记录着:书的位置信息(rowid)和书的特征(索引键值)
  3. 叶块之间相互链接:就像书架之间用绳子连着,找到第一个书架后,可以顺着绳子快速浏览相邻书架

为什么查找速度这么快?

无论你要找哪本书,管理员都只需要:

  • 查看总目录 → 找到对应分区 → 走到具体书架
  • 整个过程只需要2-3步,就算图书馆有上千万本书也是如此

关于重复书籍的处理

如果有多本同名书籍(非唯一索引),管理员会在记录时加上具体位置信息来区分。这就好比不仅记录书名,还记录"第几排第几个书架"。

索引压缩:更节省空间的技巧

现在我们来谈谈索引压缩这个黑科技:

什么是索引压缩?
不是像zip那样压缩,而是聪明地去除重复信息。比如:

  • 原来记录:"张三-小说-西游记", "张三-小说-水浒传", "张三-小说-三国演义"
  • 压缩后记录:"张三-小说"然后下面列出:"西游记","水浒传","三国演义"

压缩效果如何?
通过实际测试发现:

  • 压缩1列:节省10%空间
  • 压缩2列:节省29%空间
  • 但压缩3列反而使索引变大17%(因为增加了管理开销)

需要注意的权衡
压缩虽然节省空间,但需要更多CPU来处理。就像:

  • 压缩前:直接看书架上的标签
  • 压缩后:需要先看汇总标签,再找具体位置

所以要根据实际情况选择:如果服务器CPU空闲但磁盘紧张,就用压缩;如果CPU已经很忙,就要谨慎使用。

总结

B*树索引就像是个永远不会累的图书管理员:

  • 找书速度极快(通常只需2-3步)
  • 处理大小图书馆都游刃有余
  • 通过压缩技巧可以更节省空间
  • 但要记得:节省空间可能会增加CPU的工作量

理解这些原理,就能更好地设计数据库索引,让你的应用运行得更快更顺畅!

------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

posted @ 2025-09-02 14:34  认真就输  阅读(8)  评论(0)    收藏  举报