文档菜单

文档首页开发应用程序Python 驱动程序PyMongo

与索引一起工作

本页内容

  • 概述
  • 操作注意事项
  • 示例数据
  • 创建索引
  • 删除索引
  • 删除单个索引
  • 删除所有索引
  • 更多信息
  • API 文档

在本指南中,您可以学习如何使用 PyMongo 中的 索引。索引可以提高查询效率,并为查询和存储文档添加额外的功能。

没有索引,MongoDB 必须扫描集合中的每个文档以找到与每个查询匹配的文档。这些集合扫描很慢,可能会对应用程序的性能产生负面影响。但是,如果查询存在适当的索引,MongoDB 可以使用索引来限制必须检查的文档。

为了提高查询性能,在应用程序查询和返回排序结果的操作中经常出现的字段上构建索引。您添加的每个索引在活动状态下都会消耗磁盘空间和内存,因此我们建议您跟踪索引内存和磁盘使用情况以进行容量规划。此外,当写操作更新索引字段时,MongoDB 会更新相关索引。

由于 MongoDB 支持动态模式,应用程序可以查询预先不知道名称或任意名称的字段。MongoDB 4.2 引入了通配符索引 以帮助支持这些查询。通配符索引不是用于基于工作负载的索引规划的。

有关设计数据模型和选择适合您应用程序的索引的更多信息,请参阅 MongoDB 服务器手册中的 数据建模和索引 指南。

本指南中的示例使用sample_mflix.movies 集合,该集合来自 Atlas 示例数据集。要了解如何创建免费的 MongoDB Atlas 集群并加载示例数据集,请参阅 使用 PyMongo 入门。

MongoDB 支持多种不同的索引类型,以支持对数据进行查询。以下页面描述了最常用的索引类型,并提供了创建每种索引类型的示例代码。

您可以删除任何未使用的索引,但不能删除在 _id 字段上的默认唯一索引。

以下部分展示了如何删除单个索引或删除集合中的所有索引。

将索引实例或索引名称传递给 drop_index() 方法,以从集合中删除索引。

以下示例从 movies 集合中删除名称为 "_title_" 的索引

movies.drop_index("_title_")

注意

您不能从复合文本索引中删除单个字段。您必须删除整个索引并创建一个新的索引来更新索引字段。

从 MongoDB 4.2 版本开始,您可以通过在您的集合上调用 drop_indexes() 方法来删除所有索引

collection.drop_indexes()

对于 MongoDB 的早期版本,将 "*" 作为参数传递给您的集合上对 drop_index() 的调用

collection.drop_index("*")

要了解有关 MongoDB 中索引的更多信息,请参阅 MongoDB 服务器手册中的 索引 指南。

要了解有关本指南中讨论的任何方法或类型的更多信息,请参阅以下 API 文档

← 使用索引优化查询