View a markdown version of this page

索引属性:隐藏 - Amazon DocumentDB

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

索引属性:隐藏

Amazon DocumentDB 支持从 Amazon DocumentDB 8.0.1 开始的hidden索引属性。

隐藏的索引对查询计划者不可见,也不能用于支持查询。通过向计划者隐藏索引,您可以评估删除指数的潜在影响,而无需实际删除该指数。如果影响是负面的,则可以取消隐藏索引,而不必重新创建已删除的索引。

所有索引类型都支持该hidden属性,包括单字段、复合索引、多键索引、文本、地理空间索引和矢量索引。

行为

除了隐藏在计划器之外,隐藏索引还得到充分维护和执行。例如:

  • 如果隐藏索引是唯一索引,则该索引仍将其唯一约束应用于文档。

  • 如果隐藏索引是 TTL 索引,则该索引仍会使文档过期。

  • 隐藏的索引包含在listIndexesdb.collection.getIndexes()结果中。

  • 隐藏索引会在对集合进行写入操作时更新,并继续消耗磁盘空间和内存。因此,它们包含在统计操作中,例如db.collection.stats()$indexStats

  • 隐藏未隐藏的索引或取消隐藏的索引会将其重置。$indexStats隐藏已隐藏的索引或取消隐藏已取消隐藏的索引不会重置。$indexStats

限制

  • 您无法隐藏_id索引。

  • 您不能使用cursor.hint()来强制使用隐藏索引。

  • $merge如果隐藏了on字段上所需的唯一索引,则失败。运行前将索引设为可见$merge

示例

创建隐藏索引

要在隐藏状态下创建索引,请使用db.collection.createIndex()方法并在索引定义true中将hidden选项设置为。

例如,以下操作在productId字段上创建隐藏的升序索引:

db.collection.createIndex( { "productId": 1 }, { "name": "productId_1", "hidden": true } )

要进行验证,请在集合listIndexes上运行db.collection.getIndexes()或。隐藏索引的定义"hidden": true中包括。

db.collection.getIndexes() [ { "v": 4, "key": { "_id": 1 }, "name": "_id_" }, { "v": 4, "key": { "productId": 1 }, "name": "productId_1", "hidden": true } ]

仅当值hidden为时才返回索引选项true

隐藏现有索引

使用该collMod命令隐藏现有索引。按其name或按其标识索引keyPattern,然后设置hiddentrue

以下示例按名称隐藏索引。

db.runCommand({ collMod: "collection", index: { name: "productId_1", // Specify the index name hidden: true } })

您还可以通过索引的键模式来识别索引。

db.runCommand({ collMod: "collection", index: { keyPattern: { productId: 1 }, // Specify the index key specification document hidden: true } })

取消隐藏现有索引

要使隐藏索引再次可见,请使用hidden设置为的collMod命令false

db.runCommand({ collMod: "collection", index: { name: "productId_1", hidden: false } })

由于索引在隐藏状态下是完全维护的,因此索引一旦取消隐藏,就可以立即使用。