

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

# 使用索引的最佳實務
<a name="best-practices-indexes"></a>

## 建置索引
<a name="best-practices-building-indexes"></a>

將資料匯入 Amazon DocumentDB 時，您應該在匯入大型資料集之前建立索引。您可以使用 [Amazon DocumentDB Index Tool](https://github.com/awslabs/amazon-documentdb-tools/tree/master/index-tool) 從執行中的 MongoDB 執行個體或 mongodump 目錄擷取索引，並在 Amazon DocumentDB 叢集中建立這些索引。如需遷移的詳細指導方針，請參閱[遷移至 Amazon DocumentDB](docdb-migration.md)。

## 索引選擇性
<a name="best-practices-index-selectivity"></a>

我們建議您限制建立索引的欄位，其中重複值的數目會小於集合中文件總數的 1%。例如，如果您的集合包含 100，000 個文件，則只會在相同值發生 1，000 次或更少的欄位上建立索引。

選擇具有大量唯一值 （即高基數） 的索引可確保篩選操作傳回少量文件，從而在索引掃描期間產生良好的效能。高基數索引範例像是唯一索引，它可以保證相等述詞最多只能傳回單一文件。低基數索引的範例像是布林欄位，以及對一週中某天的索引。由於效能不佳，資料庫的查詢最佳化工具不太可能選擇低基數索引。同時，低基數索引會繼續消耗磁碟空間和 I/O 等資源。根據經驗法則，您應該在典型值頻率為總集合大小的 1％ 或更小的字段上鎖定索引。

此外，建議只在通常用作篩選器的欄位上建立索引，並定期尋找未使用的索引。如需詳細資訊，請參閱[如何分析索引用量並識別未使用的索引？](user_diagnostics.md#user-diag-index-usage)。

## 索引對寫入資料的影響
<a name="best-practices-impact-writing"></a>

雖然索引可以透過避免掃描集合中的每個文件來改善查詢性能，但此改進方式有所權衡。對於集合上的每個索引，每次插入、更新或刪除文件時，資料庫必須更新集合並將欄位寫入集合的每個索引。例如，如果集合有九個索引，資料庫必須先執行十次寫入，才能確認用戶端的作業。因此，每個額外的索引都會產生額外的寫入延遲、I/O，並增加整體使用的儲存。

叢集執行個體的大小必須適當，才能保留所有工作集記憶體。如此可避免從儲存磁碟區持續讀取索引頁面的需求，進而對效能造成負面影響，並產生較高的 I/O 成本。如需詳細資訊，請參閱[執行個體大小](https://docs.aws.amazon.com/documentdb/latest/devguide/best_practices.html#best_practices-instance_sizing)。

為了獲得最佳效能，請盡量減少集合中的索引數目，只新增必要的索引，以改善常見查詢的效能。雖然工作負載有所不同，但好的指導方針是將每個集合的索引數目保持在五個或更少。

## 識別缺少的索引
<a name="best-practices-missing-indexes"></a>

識別缺少的索引是最佳實務，我們建議定期執行。如需詳細資訊，請參閱[如何識別缺少的索引？](user_diagnostics.md#user_diagnostics-identify_missing_indexes)。

## 識別未使用的索引
<a name="best-practices-unused-indexes"></a>

識別和移除未使用的索引是我們建議定期執行的最佳實務。如需詳細資訊，請參閱[如何分析索引用量並識別未使用的索引？](user_diagnostics.md#user-diag-index-usage)。