索引支持在 MongoDB 中高效执行查询。如果没有索引,MongoDB 就必须扫描集合中的每个文档以返回查询结果。如果查询存在适当的索引,MongoDB 就可以使用该索引来限制其必须扫描的文档数。
索引可提高查询性能,但添加索引会影响写入操作的性能。对于写入读取率高的集合,由于每次插入操作都必须同时更新所有索引,因此会带来较高的索引成本。
用例
如果您的应用程序对相同字段重复运行查询,请对这些字段创建索引以提高性能。示例,考虑以下场景:
Scenario | 索引类型 |
|---|---|
人力资源部门经常需要通过员工 ID 来查找员工。您可以在员工 ID 字段上创建索引以提高查询性能。 | |
销售人员经常需要按位置查找客户信息。位置存储在一个嵌入式对象中,其中包含 在嵌入式文档上创建索引时,仅指定整个嵌入式文档的查询使用该索引。对文档中的特定字段的查询不使用该索引。 | 嵌入式文档上的单字段索引 |
杂货店经理经常需要按名称和数量查找库存商品,以确定哪些商品库存不足。您可以同时为 |
开始体验
您可以在 MongoDB Atlas 中使用驱动程序方法或 MongoDB Shell 来创建和管理索引。
在 MongoDB Atlas 中创建和管理索引
对于 MongoDB Atlas 中托管的部署,您可以通过 MongoDB Atlas 用户界面或 Atlas CLI 来创建和管理索引。MongoDB Atlas 还包含性能优化顾问,该工具可以建议索引改进慢查询、按影响程度对建议的索引进行分级,以及提供索引删除建议。
To learn how to create and manage indexes using the MongoDB Atlas UI or the Atlas CLI, see Create, View, Drop, and Hide Indexes.
如要了解有关 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。