读书笔记:白话解读B*树索引:数据库中的"图书管理员"
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
白话解读B*树索引:数据库中的"图书管理员"
想象一下,你走进一个巨大的图书馆,里面有上千万本书。如果没有索引,找一本书就像大海捞针。而B*树索引就像是这个图书馆里最聪明的图书管理员,它能帮你快速找到任何一本书。
索引是怎么工作的?
这个"图书管理员"(B*树索引)的工作方式很聪明:
- 它把图书信息整理成树状结构:最顶层是总目录(根块),中间是分区目录(分支块),最底层是详细书架信息(叶块)
- 每个叶块都记录着:书的位置信息(rowid)和书的特征(索引键值)
- 叶块之间相互链接:就像书架之间用绳子连着,找到第一个书架后,可以顺着绳子快速浏览相邻书架
为什么查找速度这么快?
无论你要找哪本书,管理员都只需要:
- 查看总目录 → 找到对应分区 → 走到具体书架
- 整个过程只需要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)

浙公网安备 33010602011771号