

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 維護索引
<a name="maintaining-indexes"></a>

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

Amazon DocumentDB 使用多版本並行控制 (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 是用來重建索引的命令。通常在索引損毀或效率不佳時使用。隨著時間的推移，索引可能會因為許多更新、插入或刪除而累積未使用的空間，導致效能降低。重新索引有助於移除這類未使用的空間，並還原索引的效率。

**reIndex 準則**
+ 僅在 Amazon DocumentDB 5.0 及更高版本上支援 reIndex 
+ reIndex 一律會在背景執行。
+ Amazon DocumentDB 支援在背景中重新索引單一索引，允許多個工作者。在 reIndex 程序執行時，查詢可以使用舊索引。
+ Amazon DocumentDB 支援透過 currentOp 編製進度報告的索引。您可以看到索引建置階段，類似於在索引建立期間檢視的索引建置階段。唯一的差別在於 reIndex 一律有八個階段，無論其是否為唯一。沒有「建置索引：排序索引鍵 2」階段。
+ reIndex 可以與相同集合上的索引相關命令以外的任何命令同時執行：createIndexes、dropIndexes、collMod 和 renameCollection。
+ 文字、地理空間、向量和部分索引目前不支援 reIndex。

**reIndex 組建**

使用下列命令來重建索引：

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

您也可以選擇性地控制指派給重建程序的工作者數量：

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

如需使用 Java 管理索引的特定資訊，請參閱 [Amazon DocumentDB with Java 中的索引管理](https://docs.aws.amazon.com/documentdb/latest/devguide/index-management-java.html)。