索引
索引支持在 MongoDB 中高效执行查询。如果没有索引,MongoDB 就必须扫描集合中的每个文档以返回查询结果。如果查询存在适当的索引,MongoDB 就可以使用该索引来限制其必须扫描的文档数。
索引可提高查询性能,但添加索引会影响写入操作的性能。对于写入读取率高的集合,由于每次插入操作都必须同时更新所有索引,因此会带来较高的索引成本。
用例
如果应用程序对相同字段重复运行查询,则可以为这些字段创建索引以提高性能。例如,设想以下场景:
Scenario | 索引类型 |
---|---|
人力资源部门经常需要通过员工 ID 来查找员工。您可以在员工 ID 字段上创建索引以提高查询性能。 | |
销售人员经常需要按位置查找客户信息。位置存储在一个嵌入式对象中,其中包含 在嵌入式文档上创建索引时,仅指定整个嵌入式文档的查询使用该索引。对文档中的特定字段的查询不使用该索引。 | 嵌入式文档上的单字段索引 |
杂货店经理经常需要按名称和数量查找库存商品,以确定哪些商品库存不足。您可以同时为 item 和 quantity 字段创建单个索引,以提升查询性能。 |
开始体验
您可以在 MongoDB Atlas 中使用驱动程序方法或 MongoDB Shell 来创建和管理索引。MongoDB Atlas 是用于云中 MongoDB 部署的完全托管服务。
在 MongoDB Atlas 中创建和管理索引
对于 MongoDB Atlas 中托管的部署,您可以通过 MongoDB Atlas 用户界面或 Atlas CLI 来创建和管理索引。MongoDB Atlas 还包含性能优化顾问,该工具可以建议索引改进慢查询、按影响程度对建议的索引进行分级,以及提供索引删除建议。
要了解如何通过 MongoDB Atlas 用户界面或 Atlas CLI 创建和管理索引,请参阅创建、查看、删除和隐藏索引。
如要了解有关 MongoDB Atlas Performance Advisor 的更多信息,请参阅监控并改进慢查询。
使用驱动程序方法或 MongoDB Shell 创建和管理索引
您可以使用驱动程序方法或 MongoDB Shell 来创建和管理索引。要了解详情,请参阅以下资源:
详情
索引是一种特殊的数据结构,它以易于遍历的形式存储一小部分集合的数据集。MongoDB 索引使用 B-tree 数据结构。
索引可存储某个特定字段或多个字段的值,并按字段的值进行排序。索引条目的排序支持高效的相等匹配和基于范围的查询操作。此外,MongoDB 还可使用索引中的顺序来返回排序后的结果。
限制
某些限制适用于索引,例如索引键的长度或每个集合的索引数量。有关详细信息,请参阅索引限制。
Default Index
MongoDB 在创建集合时会在 _id 字段上创建一个唯一索引。_id
索引可防止客户端插入两个具有相同 _id
字段值的文档。您无法删除此索引。
索引名称
索引的默认名称是索引键和索引中每个键的方向(1
或 -1
)的连接,使用下划线作为分隔符。例如,在 { item : 1, quantity:
-1 }
上创建的索引的名称为 item_1_quantity_-1
。
索引一旦创建便无法重命名。相反,您必须删除索引并使用新名称重新创建索引。
要了解如何指定索引的名称,请参阅指定索引名称。
索引构建性能
应用程序在索引构建期间可能会遭遇性能下降,包括对集合的读/写访问受到限制。有关索引构建流程的更多信息,请参阅基于已填充集合的索引构建,包括复制环境中的索引构建部分。
了解详情
MongoDB 提供了许多不同的索引类型来支持特定的数据和查询类型。要了解详情,请参阅索引类型。
如要了解可以在索引中指定哪些属性和行为,请参阅索引属性。
要了解创建索引时可能需要考虑的因素,请参阅索引策略。
如要了解索引对性能的影响,请参阅操作因素和数据模型。
要了解查询设置和索引,请参阅
setQuerySettings
。