索引
索引支持 MongoDB 中查询的高效执行。如果没有索引,MongoDB 必须扫描集合中的每个文档才能返回查询结果。如果查询存在适当的索引,MongoDB 会使用该索引来限制必须扫描的文档数量。
虽然索引可以提高查询性能,但添加索引会对写入操作的性能产生负面影响。对于具有高写入读取比率的集合,索引的成本很高,因为每次插入还必须更新任何索引。
用例
如果您的应用程序在相同字段上重复运行查询,您可以在这些字段上创建索引以提高性能。例如,考虑以下场景:
设想 | 指数类型 |
---|---|
人力资源部门经常需要通过员工 ID 查找员工。您可以在员工ID字段上创建索引以提高查询性能。 | 单字段索引 |
销售人员经常需要按位置查找客户信息。位置存储在带有state 、city 和 等字段的嵌入对象中zipcode 。您可以在整个对象上创建索引location ,以提高对该对象中任何字段的查询性能。 |
对象上的单字段索引 |
杂货店经理经常需要按名称和数量查找库存物品,以确定哪些物品库存不足。item 您可以在和字段上创建单个索引quantity 以提高查询性能。 |
复合索引 |
开始使用
要了解如何使用索引执行常见任务,请参阅以下页面:
细节
索引是一种特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分。MongoDB 索引使用 B树数据结构。
索引存储特定字段或字段集的值,按字段值排序。索引条目的排序支持高效的相等匹配和基于范围的查询操作。此外,MongoDB 可以使用索引中的排序返回排序结果。
限制
某些限制适用于索引,例如索引键的长度或每个集合的索引数量。有关详细信息,请参阅 索引限制。
默认索引
MongoDB在创建集合期间在 _id字段上创建唯一索引。该索引可防止客户端插入两个具有相同字段值的文档。您不能删除该索引。_id``_id
笔记:
在分片集群中,如果您不使用
_id
字段作为分片键,那么您的应用程序 必须确保字段中值的唯一性_id
。您可以通过使用具有自动生成的ObjectId 的字段来执行此操作。
索引名称
索引的默认名称是索引键和索引中每个键的方向(1
或-1
)的串联,使用下划线作为分隔符。例如,创建的索引的{ item : 1, quantity: -1 }
名称为item_1_quantity_-1
。
索引一旦创建就无法重命名。相反,您必须 删除索引并使用新名称重新创建索引。
要了解如何指定索引名称,请参阅指定索引名称。
索引构建性能
应用程序在索引构建期间可能会遇到性能下降的情况,包括对集合的读/写访问受到限制。有关索引构建过程的更多信息,请参阅填充集合上的索引构建,包括复制环境中的索引构建部分。
了解更多
- MongoDB 提供了许多不同的索引类型来支持特定类型的数据和查询。要了解更多信息,请参阅索引类型。
- 要了解可以在索引中指定哪些属性和行为,请参阅索引属性。
- 要了解创建索引时可能需要考虑的事项,请参阅索引策略。
- 要了解索引对性能的影响,请参阅 操作因素和数据模型。