インデックスは、クエリによってスキャンされたすべてのフィールドがインデックスに含まれている場合にクエリを カバー します。 カバード クエリは、コレクションではなくインデックスをスキャンするため、クエリのパフォーマンスが向上します。
クエリされたフィールドのサブセットがインデックス化されている場合は、インデックスも部分的にクエリをサポートできます。
このタスクについて
単一コレクションには最大64インデックスを含めることができます。 ただし、インデックスが多すぎると、その制限に達する前にパフォーマンスが低下する可能性があります。 書き込みと読み取りの比率が高いコレクションでは、挿入のたびにすべてのインデックスもアップデートする必要があるため、インデックスによってパフォーマンスが低下する可能性があります。
手順
一般的なクエリの特定
アプリケーション内の一般的なクエリ パターンを識別するには、 $queryStats集計ステージを使用します。 $queryStatsは、共有フィールドに基づいてクエリをグループ化するクエリシェイプのメトリクスを報告します。
一般的なクエリをサポートするインデックスを作成する
アプリケーションが頻繁にクエリを実行するフィールドがわかったら、それらのフィールドに対するクエリをサポートするインデックスを作成できます。 詳細については、「 の例 」を参照してください。
インデックスの使用を分析する
アプリケーションでインデックスの使用を開始したら、インデックスの有効性を分析できます。 インデックスの統計と使用状況を確認するには、以下のコマンドを実行します。
$indexStats集計ステージを使用します。MongoDB Atlas配置の場合、 Atlas UIのインデックスを表示 します。
アプリケーションのパフォーマンスを向上させるために、未使用のインデックスを削除することを検討します。 詳細については、「不要なインデックスの削除 」を参照してください。
この手順を定期的に繰り返し、インデックスが現在のワークロードをサポートしていることを確認します。
例
単一キー インデックスの作成
アプリケーションが 特定のコレクション内の単一のキーに対してのみクエリを実行する場合は、そのコレクションに対して 単一キーインデックスを作成する必要があります。 例、 productコレクション内のcategoryにインデックスを作成できます。
db.products.createIndex( { category: 1 } )
上記のインデックスはこのクエリをサポートします。
db.products.find( { category: "electronics" } )
複合インデックスの作成
アプリケーションが単一のキーと複数のキーの両方に対してクエリを実行する場合、複合インデックスは単一キーインデックスよりも効率的です。 例、 category 、 item 、 locationフィールドにインデックスを作成できます。
db.products.createIndex( { category: 1, item: 1, location: 1 } )
インデックスのプレフィックス
複合インデックスは、インデックス フィールドの開始サブセットであるインデックスプレフィックスに対するクエリをサポートします。 例、前述のインデックスは次のクエリをサポートしています。
db.products.find( { category: "electronics" } ) db.products.find( { category: "electronics", item: "television" } )
インデックスプレフィックスに関する詳細とパフォーマンスに関する考慮事項については、「インデックス プレフィックス 」を参照してください。
テキスト検索をサポートするインデックスを作成する
MongoDB Atlas でホストされているデータの場合、Atlas Search インデックスを使用した全文検索をサポートできます。 詳しくは「 Atlas Search インデックスの作成 」を参照してください。
自己管理型(Atlas 以外)の配置の場合、MongoDB はコレクション内の string コンテンツの検索をサポートするtextインデックス型を提供します。 自己管理型テキストインデックスについて詳しくは、「自己管理型配置のテキストインデックス 」を参照してください。
ベクトル検索インデックスの作成
ベクトル検索インデックスはベクトル埋め込みに対するクエリをサポートします。 ベクトル検索インデックスを作成するには、「 ベクトル検索のインデックスベクトル検索」を参照してください。
インデックスの使用と照合
文字列の比較にインデックスを使用するには、操作で同じ照合も指定する必要があります。つまり、照合順序を持つインデックスでは、操作で異なる照合順序が指定されている場合、インデックス付きフィールドで文字列比較を実行する操作をサポートできません。
警告
照合対応のインデックスキーは、照合のないインデックスのインデックスキーよりも大きくなる可能性があります。これは、照合付きで構成されたインデックスが ICU 照合キーを使用して並べ替え順序を実現するためです。