与索引一起工作
概述
在本指南中,您可以学习如何使用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 文档
要了解更多关于本指南中讨论的任何方法或类型,请参阅以下API文档