使用索引
Overview
在本指南中,您可以学习;了解如何通过C++驾驶员使用索引。 索引可以提高查询效率,并为查询和存储文档添加附加功能。
如果没有索引,MongoDB 必须扫描集合中的每个文档,以查找与每个查询匹配的文档。 这些集合扫描很慢,可能会对应用程序的性能产生负面影响。 但是,如果查询存在适当的索引,MongoDB 就可以使用该索引来限制必须检查的文档。
操作注意事项
要提高查询性能,请对应用程序查询中经常出现的字段以及返回排序结果的操作构建索引。 您添加的每个索引在活动状态下都会消耗磁盘空间和内存,因此我们建议您追踪索引内存和磁盘使用情况以进行容量规划。 此外,当写入操作更新索引字段时, MongoDB还会更新任何相关索引。
由于 MongoDB 支持动态模式,因此应用程序可以查询事先未知名称或任意名称的字段。 MongoDB 4.2引入了通配符索引来帮助支持这些查询。 通配符索引并不是为了取代基于工作负载的索引规划而设计的。
有关设计数据模型和选择适合应用程序的索引的更多信息,请参阅MongoDB Server手册中的数据建模和索引指南。
样本数据
本指南中的示例使用Atlas示例数据集中的 sample_mflix.movies
集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅 C++驱动程序入门。
创建索引
MongoDB 支持多种索引类型来进行数据查询。以下部分描述了最常见的索引类型,并提供了创建每种索引类型的示例代码。
单字段索引
单字段索引是引用集合文档中单个字段的索引。 它们提高了单字段查询和排序性能,并支持TTL (生存时间)索引,该索引会在一定时间后或在特定时钟时间自动从集合删除文档。 您可以通过指定1
为升序或-1
为降序来指定索引项的排序顺序。
注意
_id_
索引是单字段索引的一个示例。 创建新集合时,会在_id
字段上自动创建此索引。
以下示例在title
字段上按升序创建单字段索引:
auto index_specification = make_document(kvp("title", 1)); collection.create_index(index_specification.view());
要学习;了解有关单字段索引的更多信息,请参阅MongoDB Server手册中的单字段索引。
删除索引
您可以删除针对 _id
字段的所有未使用索引,但默认唯一索引除外。
以下部分介绍如何删除单个索引以及如何删除集合中的所有索引。
删除单个索引
将索引实例或索引名称传递给drop_one()
方法,以从集合中删除索引。
以下示例从movies
集合中删除名为"title_1"
的索引:
collection.indexes().drop_one("title_1");
注意
不能从复合文本索引中删除单个字段。您必须删除整个索引,然后创建新索引,才能更新索引字段。
删除所有索引
从MongoDB 4.2开始,您可以通过对集合中的索引视图调用drop_all()
方法来删除所有索引:
collection.indexes().drop_all();
对于早期版本的MongoDB ,请将"*"
作为参数传递给对集合中索引视图上drop_one()
的调用:
collection.indexes().drop_one("*");
更多信息
要学习;了解有关MongoDB中索引的更多信息,请参阅MongoDB Server手册中的索引指南。
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: