

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# インデックスを使用するためのベストプラクティス
<a name="best-practices-indexes"></a>

## インデックスの構築
<a name="best-practices-building-indexes"></a>

Amazon DocumentDB にデータをインポートする場合は、大きなデータセットをインポートする前にインデックスを作成する必要があります。[Amazon DocumentDB インデックスツールを使用して](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 回以下のフィールドにのみインデックスを作成します。

一意の値が多いインデックス (つまり、カーディナリティが高い) を選択すると、フィルターオペレーションが少数のドキュメントを返すため、インデックススキャン中に良好なパフォーマンスが得られます。高濃度インデックスの例は一意のインデックスです。これにより、等式の述語が最大で 1 つのドキュメントを返すことが保証されます。低濃度の例としては、ブール型フィールドのインデックスと、曜日別のインデックスなどがあります。パフォーマンスが低いため、データベースのクエリオプティマイザによって低カーディナリティインデックスが選択されることはほとんどありません。同時に、低濃度のインデックスは、ディスク領域や I/O などのリソースを消費し続けます。経験則として、標準値の頻度がコレクション全体のサイズの 1% 以下のフィールドのインデックスをターゲットにしてください。

さらに、よくフィルターとして使用されるフィールドに対してのみインデックスを作成し、未使用のインデックスを定期的に検索することを推奨します。詳細については、「[インデックスの使用状況を分析し、未使用のインデックスを特定する方法](user_diagnostics.md#user-diag-index-usage)」を参照してください。

## インデックスがデータの書き込みに与える影響
<a name="best-practices-impact-writing"></a>

インデックスを使用すると、コレクション内のすべてのドキュメントをスキャンする必要がなくなるためクエリのパフォーマンスが向上しますが、このメリットにはトレードオフがあります。コレクションのインデックスごとに、ドキュメントが挿入、更新、または削除されるたびに、データベースはコレクションを更新し、コレクションの各インデックスにフィールドを書き込む必要があります。例えば、コレクションに 9 つのインデックスがある場合、データベースはクライアントへのオペレーションを承認する前に 10 回の書き込みを実行する必要があります。したがって、インデックスを追加するたびに、書き込みレイテンシー、I/O、および使用率の高いストレージ全体の増加が発生します。

クラスターインスタンスは、すべてのワーキングセットメモリを保持するために適切なサイズにする必要があります。これにより、インデックスページをストレージボリュームから継続的に読み取る必要がなくなるため、パフォーマンスに悪影響を及ぼし、I/O コストが高くなります。詳細については、「[インスタンスのサイズ指定](best_practices.md#best_practices-instance_sizing)」を参照してください。

最高のパフォーマンスを得るには、コレクション内のインデックスの数を最小限に抑え、一般的なクエリのパフォーマンスを高めるために必要なインデックスのみを追加します。ワークロードはさまざまですが、ガイドラインとして、コレクションあたりのインデックス数を 5 つ以下に抑えることを推奨します。

## 欠落しているインデックスの識別
<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)」を参照してください。