尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

读书笔记:什么时候该用B*树索引?一个接地气的解读

读书笔记:什么时候该用B*树索引?一个接地气的解读
📅 发布时间:2026/6/19 15:56:23

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

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

什么时候该用B*树索引?一个接地气的解读

相信很多人在学数据库时都听过各种“经验法则”,比如“超过20%的数据就别用索引了”。但真实情况真是这样吗?其实并不尽然。今天我们就来聊聊B*树索引的使用时机,抛开死板的规则,用更实际的角度来理解。

两种看似矛盾,实则互补的情况

你可能听过两种完全相反的建议:

  1. 只有当查询会访问表中“很少一部分”数据时,才用B*树索引
  2. 当需要处理“大量”数据,但索引本身就能满足查询时,就用B*树索引

这俩听起来是不是互相打架?其实不然,它们分别对应了索引的两种完全不同用法。

用法一:用索引当“指针”去表里取数据

这种用法最常见。好比你先查书的目录(索引)找到章节页码,再翻到对应页(表)去读内容。

执行计划里你会看到:

INDEX RANGE SCAN -> TABLE ACCESS BY INDEX ROWID

关键点: 这个过程涉及两次操作——先读索引,再根据索引里的地址去表里找数据。每次根据索引找表数据,都可能产生一次磁盘读取(逻辑或物理I/O)。

什么时候好用?
当通过索引最终要访问的表数据量非常小的时候。这个“非常小”没有固定值:

  • 对于“瘦”表(行少或列小),可能低于2%-3%
  • 对于“胖”表(行多或列宽),这个比例可能高达20%-25%

为什么比例高了就不行?
想象一下,表就像一本1000页的书,分散放在地上。索引告诉你需要读第1、500、23、800、1、300、1……页。你不是顺序翻书,而是在满地书页中跳来跳去,还会反复翻看同一页(重复I/O)。如果要读的数据量很大,这种“东一榔头西一棒子”的方式效率极低,还不如从头到尾顺序读一遍(全表扫描)来得快。

用法二:用索引直接当“答案书”

这种用法更高级。索引本身已经包含了查询所需的全部信息,不需要再回表查数据。

执行计划里你会看到:

INDEX RANGE SCAN

(后面没有 TABLE ACCESS)

关键点: 整个查询只在索引结构里完成,像是直接阅读一本提炼过的摘要书。这时,你访问索引中数据的比例可以是0%到100%,都可能是高效的,因为完全避免了耗时的表访问。

什么时候好用?

  • 查询只涉及索引列时(如SELECT index_column FROM table WHERE index_column = ?)
  • 执行COUNT(*)等聚合查询,且条件都在索引上时
  • 对响应速度要求高,用户希望立刻看到第一批结果(如分页查询)

一个生动的例子

假设一张表有10万行数据:

  • 情况A:查询需要返回2万行数据,且必须回表取其他列。
    • 表块大约1000个,索引访问需要2万次随机I/O,平均每个块被读20次。全表扫描更快(只需顺序读1000个块)。
  • 情况B:查询需要返回2万行数据,但所有需要的列都在索引里。
    • 数据库只读索引块,效率很高。用索引更快。

总结一下

该不该用B*树索引,不只看数据量比例,更要看查询如何访问数据:

  1. 索引当指针(回表查询):适合访问少量表数据,追求精确命中。
  2. 索引当答案(覆盖索引):适合任何比例的数据量,追求快速响应和避免表访问。

核心原则是:随机I/O(索引回表)的成本远高于顺序I/O(全表扫描)。如果你的查询会引发大量随机I/O,就需要谨慎评估。

所以,下次别再死记“20%”规则了。多看看执行计划,问问自己:我的查询到底是怎么取数据的?索引是充当“地图”还是“答案”?理解了这一点,你就能真正掌握索引使用的精髓。

------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

提供ORACLE技术支持(系统优化,故障处理,安装升级,数据恢复等) TEL:18081072613,微信、QQ同手机号。

相关新闻

  • 2025年工作服厂家权威推荐榜:防静电/劳保/国网/餐厅/工厂/电工/防酸碱/电力/车间/航空/员工工作服,文化衫/T恤/POLO衫/冲锋衣全品类精选
  • 误删 Stash 后的数据恢复实践
  • 2025年10月重庆保洁公司推荐排名:聚焦服务细节与合规风险的避坑手册

最新新闻

  • 180. 碾压GAN/VAE!一文讲清DDPM前向加噪与反向去噪,完整可运行代码+实战排错
  • 2026 阜阳上班族突围:不愿线下课堂打卡,电大中专全程线上考核毕业新规 - cc江江
  • 20254226黄婉婷实验四源代码
  • Python之math-ops-py包语法、参数和实际应用案例
  • Windows虚拟显示器驱动终极指南:为你的电脑扩展无限屏幕空间
  • 2026安徽省中考200-400分可以上什么学校?安徽合肥医药卫生学校3+2,直升大学 - 小张zc

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号