インデックスは、MongoDB でクエリを効率的に実行するのに役立ちます。インデックスがない場合、MongoDB でクエリ結果を返すには、コレクション内のすべてのドキュメントをスキャンする必要があります。クエリに適切なインデックスがある場合、MongoDB ではそのインデックスを使用してスキャンが必要なドキュメント数が制限されます。
インデックスを使用するとクエリのパフォーマンスは向上しますが、インデックスを追加すると書き込み操作の動作に悪影響が生じます。書き込みと読み取りの比率が高いコレクションでは、挿入のたびにすべてのインデックスを更新する必要があるため、インデックスの使用コストは高くなります。
ユースケース
アプリケーションが同じフィールドに対して繰り返しクエリを実行する場合は、それらのフィールドにインデックスを作成してパフォーマンスを向上させます。例として、次のシナリオについて考えてみましょう。
Scenario | インデックス タイプ |
|---|---|
人事部門では従業員 ID で従業員を検索する必要がよく生じます。従業員 ID フィールドにインデックスを作成すると、クエリのパフォーマンスが向上します。 | |
営業担当者は、クライアントの情報をロケーションごとに検索する必要が頻繁にあります。ロケーションは、 埋め込みドキュメントにインデックスを作成すると、その埋め込みドキュメント全体を指定するクエリのみがインデックスを使用できます。ドキュメント内の特定のフィールドに対するクエリでは、インデックスは使用されません。 | 埋め込みドキュメントの単一フィールド インデックス |
食料品店のマネージャーは、在庫が少ない商品を確認するために、商品の名前と数量で在庫アイテムを検索することがよくあります。 |
はじめる
MongoDB Atlasでは、ドライバー メソッドまたはMongoDB Shell を使用してインデックスを作成および管理できます。
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を参照してください。