文档菜单
文档首页
/
MongoDB 手册

索引

本页内容

  • 用例
  • 入门
  • 详细信息
  • 了解更多

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

尽管索引可以提高查询性能,但添加索引会对写操作的性能产生负面影响。对于写多读少的集合,索引成本高昂,因为每次插入都必须更新任何索引。

如果您的应用程序反复在相同字段上运行查询,您可以在这些字段上创建索引以改善性能。例如,考虑以下场景

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

销售人员经常需要通过位置查找客户信息。位置存储在包含如下字段的嵌入式对象中statecity,和zipcode。您可以在location对象上创建索引以提高对该对象的查询性能。

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

嵌入式文档上的单字段索引
杂货店经理经常需要通过名称和数量查找库存项目,以确定哪些项目库存不足。您可以在itemquantity字段上创建单个索引以提高查询性能。

您可以在以下位置创建和管理索引MongoDB Atlas,通过驱动程序方法或MongoDB Shell。MongoDB Atlas是云中MongoDB部署的全托管服务。

对于托管在MongoDB Atlas中的部署,您可以使用MongoDB Atlas UI或Atlas CLI创建和管理索引。MongoDB Atlas还包括一个性能顾问,它会推荐索引以提高慢查询,按影响程度对建议的索引进行排序,并推荐哪些索引可以删除。

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

要了解更多关于MongoDB Atlas性能顾问的信息,请参阅监控和改进慢查询。

您可以使用驱动程序方法或MongoDB Shell创建和管理索引。有关更多信息,请参阅以下资源

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

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

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

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

注意

分片集群中,如果您使用_id字段作为分片键,则您的应用程序必须确保_id字段值的唯一性。您可以通过使用具有自动生成的ObjectId字段的字段来实现这一点。

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

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

有关指定索引名称的说明,请参阅指定索引名称

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

返回

聚合管道