Docs Menu
Docs Home
/
MongoDB マニュアル

Indexes

項目一覧

  • ユースケース
  • はじめる
  • 詳細
  • 詳細

インデックスは、MongoDB でクエリを効率的に実行するのに役立ちます。インデックスがない場合、MongoDB でクエリ結果を返すには、コレクション内のすべてのドキュメントをスキャンする必要があります。クエリに適切なインデックスがある場合、MongoDB ではそのインデックスを使用してスキャンが必要なドキュメント数が制限されます。

インデックスを使用するとクエリのパフォーマンスは向上しますが、インデックスを追加すると書き込み操作の動作に悪影響が生じます。書き込みと読み取りの比率が高いコレクションでは、挿入のたびにすべてのインデックスを更新する必要があるため、インデックスの使用コストは高くなります。

アプリケーションで同じフィールドに対して繰り返しクエリが実行される場合、それらのフィールドにインデックスを作成してパフォーマンスを向上できます。たとえば、次のシナリオについて考えてみましょう。

Scenario
インデックス タイプ
人事部門では従業員 ID で従業員を検索する必要がよく生じます。従業員 ID フィールドにインデックスを作成すると、クエリのパフォーマンスが向上します。
単一フィールド インデックス

営業担当者は、クライアントの情報をロケーションごとに検索する必要が頻繁にあります。ロケーションは、 statecityzipcode などのフィールドがある埋め込みオブジェクトに保存されます。location オブジェクトにインデックスを作成すると、そのオブジェクトに対するクエリのパフォーマンスが向上します。

注意

埋め込みドキュメントにインデックスを作成すると、その埋め込みドキュメント全体を指定するクエリのみがインデックスを使用できます。ドキュメント内の特定のフィールドに対するクエリでは、インデックスは使用されません。

埋め込みドキュメントの単一フィールド インデックス
食料品店のマネージャーは、在庫が少ない商品を確認するために、商品の名前と数量で在庫アイテムを検索することがよくあります。item フィールドと quantity フィールドの両方に単一のインデックスを作成して、クエリのパフォーマンスを向上することができます。

MongoDB Atlasでは、ドライバー メソッドまたは MongoDB Shell を使用してインデックスを作成および管理できます。 MongoDB Atlas は、MongoDB をクラウドに配置するためのフルマネージド サービスです。

MongoDB Atlas でホストされる配置用のインデックスは、MongoDB Atlas UI または Atlas CLI で作成、管理できます。また、MongoDB Atlas には、遅いクエリを改善するインデックスの推奨、推奨されるインデックスの影響度別ランク付け、削除するインデックスの推奨機能を持つ Performance Advisor も付属します。

インデックスを MongoDB Atlas UI または Atlas CLI で作成および管理する方法については、「 インデックスの作成、表示、削除、非表示 」を参照してください。

MongoDB Atlas Performance Advisor の詳細については、「低速クエリの監視と改善 」を参照してください。

インデックスは、ドライバー メソッドまたは MongoDB Shell で作成、管理できます。詳細については、次のリソースを参照してください。

インデックスは、コレクションのデータセットのごく一部を簡単に走査できる形式で保存する特別なデータ構造です。 MongoDB インデックスは B 木 を 使用します データ構造。

インデックスには、特定のフィールドまたはフィールド セットの値が、フィールド値の順に保存されます。インデックス エントリの順序付けは、効率的な等式一致と範囲ベースのクエリ操作をサポートします。さらに、MongoDB ではインデックス順序でソートされた結果を返すことができます。

インデックスには、インデックス キーの長さやコレクションあたりのインデックス数など、特定の制限が適用されます。詳細については、「インデックスの制限」を参照してください。

MongoDB では、コレクションの作成中にユニークインデックス_id フィールドに作成されます。_id インデックスを使用すると、同じ値を持つ 2 つのドキュメントがクライアントによって _id フィールドに挿入されるのを防止できます。このインデックスは削除できません。

注意

シャーディングされたクラスター_id フィールドを シャードキー として使用しない場合は、アプリケーションで _id フィールドの値をユニークなものにする必要があります。そのためには、自動生成された ObjectId を値とするフィールドを使用します。

インデックスのデフォルト名はインデックスされたキーと、インデックス内の各キーの方向(1 または -1)をアンダースコアを区切り文字に使用して連結したものです。たとえば、{ item : 1, quantity: -1 } に作成されたインデックスには item_1_quantity_-1 という名前が付けられます。

一度作成したインデックス名は変更できません。代わりに、インデックスを削除して新しい名前で作成し直す必要があります。

インデックスの名前を指定する方法については、「インデックス名の指定」を参照してください。

インデックス構築中に、コレクションへの読み取り/書き込みアクセスが制限されるなど、アプリケーションのパフォーマンスが低下することがあります。インデックス構築プロセスの詳細については、「入力済みコレクションでのインデックス構築」(「複製された環境でのインデックス構築」セクションを含む)を参照してください。

戻る

集計パイプライン