索引考虑与管理
概述
在本指南中,您可以了解如何使用索引来提高查询效率,并添加查询和存储文档的功能。
没有相关索引的情况下,MongoDB会扫描集合中的每个文档以找到与查询匹配的文档。这些集合扫描很慢,可能会对应用程序的性能产生负面影响。然而,如果存在适当的索引,MongoDB可以使用该索引来减少需要检查的文档数量。
操作注意事项
为了提高查询性能,请在经常出现在应用程序查询或返回排序结果的字段上构建索引。您添加的每个索引都会消耗磁盘空间和内存,因此我们建议在容量规划时跟踪内存和磁盘使用情况。此外,当写操作更新索引字段时,MongoDB会更新相关的索引,这可能会对写操作的性能产生负面影响。
您可以在MongoDB应用程序中使用通配符索引来对名称事先未知或任意的字段进行查询。通配符索引不是用来替代基于工作负载的索引规划的。
有关设计数据模型和选择索引的更多信息,请参阅MongoDB服务器手册中“操作因素和数据模型”指南的索引部分。
示例数据
本指南中的示例使用的是movies
集合位于 sample_mflix
数据库中,该数据库来自Atlas 示例数据集。要了解如何创建免费的 MongoDB Atlas 集群并加载示例数据集,请参阅Atlas 入门指南。
创建索引
MongoDB 支持多种索引类型以帮助查询数据。以下页面描述了不同的索引类型,并提供了创建每种索引类型的示例代码。
列出索引
您可以通过调用 MongoDB\Collection::listIndexes()
方法检索集合上的索引列表
foreach ($collection->listIndexes() as $indexInfo) { echo $indexInfo; }
删除索引
您可以删除除默认的唯一索引 _id
字段上的索引之外的所有未使用索引。
以下部分提供了示例,展示了如何从一个集合中删除一个或多个索引。
删除单个索引
将索引的名称传递给 MongoDB\Collection::dropIndex()
方法,以从集合中删除索引。
以下示例删除了 '_title_'
索引,从 movies
集合
$collection->dropIndex('_title_');
注意
您不能从复合索引中删除单个字段。您必须删除整个索引并创建一个新的索引来更新索引字段。
删除所有索引
您可以通过在集合上调用 MongoDB\Collection::dropIndexes()
方法来删除所有索引。
$collection->dropIndexes();
dropIndexes()
方法返回有关已删除索引数量和成功消息的信息。
API 文档
要了解更多关于本指南中讨论的任何方法或类型,请参阅以下 API 文档