全书目录

第十九篇:MongoDB 完全指南 —— 弹性档案仓宇宙

第九章:索引 —— 给档案仓建立检索目录

1 分钟 326 字 第 360 / 962 个阅读单元

如果没有索引,每次查询都像管理员从头翻到尾。
索引就是档案仓的目录卡、检索号、导航图。

text
没有索引
查询 -> 从第一个档案袋翻到最后一个

有索引
查询 -> 先查目录 -> 直接去目标区域

MongoDB 默认只有 _id 索引。
其他索引,你要按查询需求主动设计。

最常见的几类:

  • 单字段索引:一个字段
  • 复合索引:多个字段组合
  • 多键索引:数组字段
  • 文本索引:文本搜索
  • 哈希索引:哈希值索引,常见于特定分布策略场景

示例:

javascript
db.users.createIndex({ email: 1 })
db.orders.createIndex({ status: 1, createdAt: -1 })
db.orders.createIndex({ "items.sku": 1 })

复合索引要特别注意字段顺序。
比如:

javascript
db.orders.createIndex({ status: 1, createdAt: -1 })

它最擅长支持的是这类查询:

javascript
db.orders.find({ status: "paid" }).sort({ createdAt: -1 })

因为目录本身就是按 status -> createdAt 排好的。

索引不是越多越好。因为:

  • 每次写入都要维护索引
  • 索引占用磁盘和内存
  • 乱建索引会拖慢写入

建索引的原则不是“猜”,而是看你的真实访问路径。
一个很好用的习惯是:对关键查询做 explain()

javascript
db.orders.find({ status: "paid" }).explain("executionStats")