如果您的应用程序对相同字段重复运行查询,请对这些字段创建索引以提高性能。
如要创建索引,请使用 createIndex() Shell 方法或适用于您的驱动程序的等效方法。本页显示 MongoDB Shell 和驱动程序的示例。
关于此任务
在 MongoDB Shell 或驱动程序中运行创建索引的命令时,MongoDB 仅在没有相同规格索引存在时才创建索引。
尽管索引可提高查询性能,但添加索引会对写入操作的性能产生负面影响。对于具有高写入读取比率的集合,索引的成本很高,因为每次插入和更新还必须更新所有索引。
警告
不要在加密字段上创建索引。在使用Queryable Encryption的加密字段上创建索引会对性能产生负面影响。相反,您可以在 __safeContent__字段上创建索引,以支持对加密字段的查询。
步骤
例子
结果
使用 mongosh 监控索引创建。
要查看集合中存在哪些索引(包括当前正在构建的索引),请运行 db.collection.getIndexes() 方法:
db.collection.getIndexes()
要检查索引是否正在构建,请在 admin数据库上使用 $currentOp 和 db.aggregate()。
以下聚合管道使用$match阶段来显示在 name字段上构建降序索引的活动操作:
db.getSiblingDB("admin").aggregate( [ { $currentOp : { idleConnections: true } }, { $match : {"command.createIndexes": { $exists: true } } } ] )
MongoDB 通过将 active 字段设置为 false,将不同阶段的索引构建(包括等待提交法定人数)标记为空闲连接。idleConnections: true 设置在 $currentOp输出中包含这些空闲连接。
要查看有关使用驱动程序来创建的现有索引的信息,请参阅驱动程序的文档。