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