第3章 索引:全表扫描的代价


第 3 章 · 索引:全表扫描的代价

章节摘要:索引是 MongoDB 用空间换查询时间的 B 树结构。本章从一次"三条查询拖垮整个集群"的事故讲起,覆盖索引原理、执行计划阅读、复合索引规则与常见失效写法。读完本章,你能用 explain 判断任何一条查询是否走索引,并设计出合理的复合索引。

学习目标

  1. 能解释 B 树索引为何让等值查询从 O(n) 降到近似 O(log n);
  2. 能读懂 explain 输出的 COLLSCAN/IXSCAN、nReturned 与 totalKeysExamined;
  3. 能应用最左前缀、ESR 原则设计复合索引;
  4. 能识别隐式转换、前缀正则等索引失效写法。

核心概念速览

金句:没有索引的查询不是慢,是让整台服务器陪着它把每个文档摸一遍。

索引健康度分层图

索引健康度分层图

子章节导航

  • 3.1 索引原理:全表扫描事故现场,讲 B 树结构、explain 读法与索引类型。复盘认真还原了二十分钟停摆的时间线——currentOp 与 killOp 是当时唯二有效的动作;explain 三层输出的读法(queryPlanner 看计划、executionStats 看扫描量、allPlansExecution 看候选对比)是本节的操作核心,maxTimeMS 作为应用侧自保手段一并给出。
  • 3.2 索引设计与维护:讲复合索引 ESR 原则、失效写法与索引运维。ESR 是起点不是终点,低选择性等值列的边界情况说明规则要服从测量;运维侧覆盖 $indexStats 找零访问索引、hideIndex 两步下线、部分索引与稀疏索引的取舍,这些是索引从"会建"走到"会养"的分界线。

子章节之间的逻辑关系

3.1 解决"看得懂"——读懂执行计划;3.2 解决"改得对"——设计与维护索引。两节的连接件是三个数字:nReturned、totalKeysExamined、totalDocsExamined。3.1 教你看懂它们,3.2 的所有手段(ESR、部分索引、冗余清理)最终都体现为这三个数字的改善。反过来,离开这三个数字谈索引设计,就退回到口味之争。

看懂 explain(3.1) ──► 设计与维护(3.2) │ │ COLLSCAN 定位 ESR · 失效清单 · 冗余清理 ​

本章还有一个贯穿性的提醒:索引问题从来不只是查询慢。档案 06 里它表现为整站停摆,第 7 章里它会以热点分片的形态出现,第 10 章里它又是缓存驱逐的帮凶——索引是 MongoDB 性能问题的第一嫌疑人,无论案情表面是什么。

本章知识点核对清单

离开本章前逐条自查:能否对着一条 explain 输出指出 COLLSCAN 与 IXSCAN 的位置;能否用 nReturned、totalKeysExamined、totalDocsExamined 三个数字判断索引效率,并说出理想比例;能否按 ESR 顺序为"查某城市最近三十天的已完成订单"设计复合索引;能否列出至少四种索引失效写法(隐式类型转换、前缀不确定的正则、跳过前导列的范围查询、条件放错位置);能否说清 hideIndex 与直接 dropIndex 在下线流程上的差别。卡住哪条,回对应小节的事故复盘再走一遍。

前置知识与后续延伸

前置:第 2 章的查询语法。延伸:索引是性能三件套(索引、建模、硬件缓存)之一,另两件分别在第 5 章与第 10 章。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U