Indexes
インデックスは、MongoDB でクエリを効率的に実行するのに役立ちます。インデックスがない場合、MongoDB でクエリ結果を返すには、コレクション内のすべてのドキュメントをスキャンする必要があります。クエリに適切なインデックスがある場合、MongoDB ではそのインデックスを使用してスキャンが必要なドキュメント数が制限されます。
インデックスを使用するとクエリのパフォーマンスは向上しますが、インデックスを追加すると書き込み操作の動作に悪影響が生じます。書き込みと読み取りの比率が高いコレクションでは、挿入のたびにすべてのインデックスを更新する必要があるため、インデックスの使用コストは高くなります。
ユースケース
アプリケーションで同じフィールドに対して繰り返しクエリが実行される場合、それらのフィールドにインデックスを作成してパフォーマンスを向上できます。たとえば、次のシナリオについて考えてみましょう。
Scenario | インデックス タイプ |
---|---|
人事部門では従業員 ID で従業員を検索する必要がよく生じます。従業員 ID フィールドにインデックスを作成すると、クエリのパフォーマンスが向上します。 | |
営業担当者は、クライアントの情報をロケーションごとに検索する必要が頻繁にあります。ロケーションは、 埋め込みドキュメントにインデックスを作成すると、その埋め込みドキュメント全体を指定するクエリのみがインデックスを使用できます。ドキュメント内の特定のフィールドに対するクエリでは、インデックスは使用されません。 | 埋め込みドキュメントの単一フィールド インデックス |
食料品店のマネージャーは、在庫が少ない商品を確認するために、商品の名前と数量で在庫アイテムを検索することがよくあります。 |
はじめる
MongoDB Atlasでは、ドライバー メソッドまたは MongoDB Shell を使用してインデックスを作成および管理できます。 MongoDB Atlas は、MongoDB をクラウドに配置するためのフルマネージド サービスです。
MongoDB Atlas でインデックスの作成と管理
MongoDB Atlas でホストされる配置用のインデックスは、MongoDB Atlas UI または Atlas CLI で作成、管理できます。また、MongoDB Atlas には、遅いクエリを改善するインデックスの推奨、推奨されるインデックスの影響度別ランク付け、削除するインデックスの推奨機能を持つ Performance Advisor も付属します。
インデックスを MongoDB Atlas UI または Atlas CLI で作成および管理する方法については、「 インデックスの作成、表示、削除、非表示 」を参照してください。
MongoDB Atlas Performance Advisor の詳細については、「低速クエリの監視と改善 」を参照してください。
ドライバー メソッドまたは MongoDB Shell によるインデックスの作成と管理
インデックスは、ドライバー メソッドまたは MongoDB Shell で作成、管理できます。詳細については、次のリソースを参照してください。
詳細
インデックスは、コレクションのデータセットのごく一部を簡単に走査できる形式で保存する特別なデータ構造です。 MongoDB インデックスは B 木 を 使用します データ構造。
インデックスには、特定のフィールドまたはフィールド セットの値が、フィールド値の順に保存されます。インデックス エントリの順序付けは、効率的な等式一致と範囲ベースのクエリ操作をサポートします。さらに、MongoDB ではインデックス順序でソートされた結果を返すことができます。
制限事項
インデックスには、インデックス キーの長さやコレクションあたりのインデックス数など、特定の制限が適用されます。詳細については、「インデックスの制限」を参照してください。
Default Index
MongoDB では、コレクションの作成中にユニークインデックスが _id フィールドに作成されます。_id
インデックスを使用すると、同じ値を持つ 2 つのドキュメントがクライアントによって _id
フィールドに挿入されるのを防止できます。このインデックスは削除できません。
注意
シャーディングされたクラスターで _id
フィールドを シャードキー として使用しない場合は、アプリケーションで _id
フィールドの値をユニークなものにする必要があります。そのためには、自動生成された ObjectId を値とするフィールドを使用します。
インデックス名
インデックスのデフォルト名はインデックスされたキーと、インデックス内の各キーの方向(1
または -1
)をアンダースコアを区切り文字に使用して連結したものです。たとえば、{ item : 1, quantity:
-1 }
に作成されたインデックスには item_1_quantity_-1
という名前が付けられます。
一度作成したインデックス名は変更できません。代わりに、インデックスを削除して新しい名前で作成し直す必要があります。
インデックスの名前を指定する方法については、「インデックス名の指定」を参照してください。
インデックス構築パフォーマンス
インデックス構築中に、コレクションへの読み取り/書き込みアクセスが制限されるなど、アプリケーションのパフォーマンスが低下することがあります。インデックス構築プロセスの詳細については、「入力済みコレクションでのインデックス構築」(「複製された環境でのインデックス構築」セクションを含む)を参照してください。
詳細
MongoDB には幅広いデータとクエリをサポートできるようにさまざまなインデックス タイプがあります。詳細については、「インデックス タイプ」を参照してください。
インデックスで指定可能なプロパティと動作については、「インデックスのプロパティ」を参照してください。
インデックス作成時の考慮点を把握するには、「インデックス作成方法」を参照してください。
パフォーマンスへのインデックスの影響については、「運用上の要因とデータモデル」を参照してください。
クエリ設定とインデックスについては、
setQuerySettings
を参照してください。