Docs 菜单
Docs 主页
/
MongoDB Manual

索引

在此页面上

  • 用例
  • 开始体验
  • 详情
  • 了解详情

索引支持在 MongoDB 中高效执行查询。如果没有索引,MongoDB 就必须扫描集合中的每个文档以返回查询结果。如果查询存在适当的索引,MongoDB 就可以使用该索引来限制其必须扫描的文档数。

索引可提高查询性能,但添加索引会影响写入操作的性能。对于写入读取率高的集合,由于每次插入操作都必须同时更新所有索引,因此会带来较高的索引成本。

如果应用程序对相同字段重复运行查询,则可以为这些字段创建索引以提高性能。例如,设想以下场景:

场景
索引类型
人力资源部门经常需要通过员工 ID 来查找员工。您可以在员工 ID 字段上创建索引以提高查询性能。

销售人员经常需要按位置查找客户信息。位置存储在一个嵌入式对象中,其中包含 statecityzipcode 等字段。您可以在 location 对象上创建索引,以提高对该对象的查询性能。

注意

在嵌入式文档上创建索引时,仅指定整个嵌入式文档的查询使用该索引。对文档中的特定字段的查询不使用该索引。

嵌入式文档上的单字段索引
杂货店经理经常需要按名称和数量查找库存商品,以确定哪些商品库存不足。您可以同时为 itemquantity 字段创建单个索引,以提升查询性能。

您可以使用驱动程序方法或 MongoDB Shell 在 MongoDB Atlas中创建和管理索引。 MongoDB Atlas 是针对云中 MongoDB 部署的完全托管服务。

对于 MongoDB Atlas 中托管的部署,您可以通过 MongoDB Atlas 用户界面或 Atlas CLI 来创建和管理索引。MongoDB Atlas 还包含性能优化顾问,该工具可以建议索引改进慢查询、按影响程度对建议的索引进行分级,以及提供索引删除建议。

要了解如何通过 MongoDB Atlas 用户界面或 Atlas CLI 创建和管理索引,请参阅创建、查看、删除和隐藏索引。

要了解有关 MongoDB Atlas Performance Advisor 的更多信息,请参阅监控和改进慢速查询。

您可以使用驱动程序方法或 MongoDB Shell 来创建和管理索引。要了解详情,请参阅以下资源:

索引是一种特殊的数据结构,它以易于遍历的形式存储一小部分集合数据集。 MongoDB 索引使用 B-Tree 数据结构。

索引可存储某个特定字段或多个字段的值,并按字段的值进行排序。索引条目的排序支持高效的相等匹配和基于范围的查询操作。此外,MongoDB 还可使用索引中的顺序来返回排序后的结果。

某些限制适用于索引,例如索引键的长度或每个集合的索引数量。有关详细信息,请参阅索引限制

MongoDB 在创建集合时会在 _id 字段上创建一个唯一索引_id 索引可防止客户端插入两个具有相同 _id 字段值的文档。您无法删除此索引。

注意

分片群集中,如果您使用 _id 字段作为分分片键,那么您的应用程序必须确保 _id 字段中的值具有唯一性。为此,您可以使用一个具有自动生成的 ObjectId 的字段。

索引的默认名称是索引键和索引中每个键的方向(1-1)的连接,使用下划线作为分隔符。例如,在 { item : 1, quantity: -1 } 上创建的索引的名称为 item_1_quantity_-1

索引一旦创建便无法重命名。相反,您必须删除索引并使用新名称重新创建索引。

要了解如何指定索引的名称,请参阅指定索引名称

应用程序在索引构建期间可能会遭遇性能下降,包括对集合的读/写访问受到限制。有关索引构建流程的更多信息,请参阅基于已填充集合的索引构建,包括复制环境中的索引构建部分。

  • MongoDB 提供了许多不同的索引类型来支持特定的数据和查询类型。要了解详情,请参阅索引类型

  • 如要了解可以在索引中指定哪些属性和行为,请参阅索引属性。

  • 要了解创建索引时可能需要考虑的因素,请参阅索引策略

  • 如要了解索引对性能的影响,请参阅操作因素和数据模型。

← Map-Reduce 到聚合管道