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

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

我们的文章会在微信公众号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)

http://www.hskmm.com/?act=detail&tid=32984

相关文章:

  • 2025年工作服厂家权威推荐榜:防静电/劳保/国网/餐厅/工厂/电工/防酸碱/电力/车间/航空/员工工作服,文化衫/T恤/POLO衫/冲锋衣全品类精选
  • 消息推送策略:如何在营销与用户体验间找到最佳平衡点
  • ONLYOFFICE Docs 9.1正式发布:更强大的PDF编辑器、更快的公式性能、超500项优化!
  • 全球最佳承包商管理平台深度解析
  • HTTP 和 TCP 的关系与区别
  • cucumber7+junit5
  • 剪映VIP全功能永久解锁后,我的剪辑效率直接翻倍!
  • 零碳园区建设指南:MyEMS 如何用数字化破解能耗与碳排放协同管理难题?
  • 误删 Stash 后的数据恢复实践
  • mysql开启binlog日志,完全配置指南
  • 2025年10月固定资产管理系统推荐榜单:基于全生命周期功能对比与行业适配度评测
  • Linux MegaCli RAID 控制管理工具详解
  • 2025年10月重庆保洁公司推荐对比榜:用数据还原真实服务能力
  • 2025年10月重庆保洁公司推荐排名:聚焦服务细节与合规风险的避坑手册
  • 2025 房屋改造公司最新推荐榜:聚焦老房 / 局部 / 小户型需求的口碑深度测评,花小钱住好家必看
  • 2025年10月床垫品牌推荐榜:十强对比与中立评测助你安心选购
  • uni-app x商城,商品列表组件封装以及使用
  • 深入解析:【Proteus8.17仿真】 STM32仿真 0.96OLED 屏幕显示ds1302实时时间
  • 2025年10月床垫品牌推荐榜:围绕环保认证与试睡政策的系统化评析
  • 贪心策略总结
  • 2025年10月上海装修公司推荐榜:极家家居设计标准与施工节点全维度对比
  • 完整教程:在鸿蒙NEXT中使用WebSocket实现实时网络通信
  • Atcoder Regular Contest 做题记录
  • Linux sas3ircu RAID 控制管理工具详解
  • Linux StorCLI RAID 控制管理工具详解
  • 2025年浓缩机厂家权威推荐榜:高效浓缩机/尾矿浓缩机/污泥浓缩机/新型浓缩机/矿用浓缩机/浓密机/中心转动浓缩机/真空浓缩机/污泥脱水机
  • 新手学AI算法/嵌入式 “知其然不知其所以然”?华清远见虚拟仿真工具拆分算法组件 + 动态调参,过程感拉满
  • http1.0,http2.0,http3.0各个协议的特点和区别
  • Clip Studio Paint 4.0.3下载地址与安装教程
  • ​​示波器探头的正确选择与使用指南​