

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

# 维护索引
<a name="maintaining-indexes"></a>

## 索引膨胀
<a name="maintaining-indexes-bloat"></a>

Amazon DocumentDB 使用 Multi-Version 并发控制 (MVCC) 来管理并发交易。删除或更新文档后，其先前版本将作为“失效”版本保留在集合和索引中。垃圾回收过程会自动从这些失效版本中回收空间以用于未来的操作。

当集合的索引因失效或过时的索引条目累积或页面内的碎片累积而变大时，就会出现索引膨胀。报告的百分比表示未来索引条目可以使用的索引空间量。此膨胀会同时消耗缓冲区缓存和存储空间中的空间。如果要消除膨胀，则需要重建索引。

**示例：**运行以下命令来确定索引的未使用存储空间：

```
db.coll.aggregate({$indexStats:{}});
```

结果类似如下：

```
{ 
    "name" : "_id_",
    "key" : { 
        "_id" : 1 
    },
    "host" : "devbox-test.localhost.a2z.com:27317",
    "size" : NumberLong(827392),
    "accesses" : {
        "ops" : NumberLong(40000),
        "docsRead" : NumberLong(46049),
        "since" : ISODate("2025-04-03T21:44:51.251Z") 
    },
    "cacheStats" : {
        "blksRead" : NumberLong(264),
        "blksHit" : NumberLong(140190),
        "hitRatio" : 99.8121
    }, 
    "unusedStorageSize" : {
        "unusedSizeBytes" : 409600,
        "unusedSizePercent" : 49.51
    }
}
```

使用 reIndex 命令无需停机即可重建索引，该命令需要扫描整个集合。参见使用 reIndex 维护索引。

## 使用 reIndex 维护索引
<a name="maintaining-indexes-reindex"></a>

reIndex 是一个用于重建索引的命令。通常在索引损坏或效率低下时使用。随着时间的推移，索引会因为多次更新、插入或删除而积累未使用的空间，从而导致性能下降。重新编制索引有助于删除此类未使用的空间并恢复索引的效率。

**重新索引指南**
+ 只有亚马逊 DocumentDB 5.0 及更高版本支持重新索引
+ reIndex 总是在后台运行。
+ Amazon DocumentDB 支持在后台重新索引单个索引，允许多个工作人员。reIndex 进程运行时，查询可以使用旧索引。
+ 亚马逊 DocumentDB 支持通过 currentOP 为进度报告编制索引。您可以看到类似于索引创建期间所查看的索引构建阶段的索引构建阶段。唯一的区别是，无论reIndex是否独特，它总是有八个阶段。没有 “建筑索引：按键排序 2” 阶段。
+ reIndex 可以与任何命令同时运行，但同一集合上的索引相关命令除外：createIndexes、dropIndexes、collMod 和 renameCollection。
+ 文本、地理空间、矢量索引和部分索引目前不支持 reIndex。

**重新索引构建**

使用以下命令来重建索引：

```
db.runCommand({ reIndex: "collection-name", index: "index-name"})
```

您也可以选择控制分配给重建过程的工作人员的人数：

```
db.runCommand({ reIndex: "collection-name", index: "index-name", workers: number })
```

有关使用 Java 管理索引的特定信息，请参阅使用 Java 在 A [mazon DocumentDB 中管理索引](https://docs.aws.amazon.com/documentdb/latest/devguide/index-management-java.html)。