インデックスは、クエリによってスキャンされたすべてのフィールドがインデックスに含まれている場合にクエリをサポートします。クエリはコレクションではなくインデックスをスキャンします。クエリをサポートするインデックスを作成すると、クエリのパフォーマンスが大幅に向上します。
このドキュメントでは、クエリをサポートするインデックスを作成するための戦略について説明します。
すべてのクエリが同じ単一のキーを使用する場合は、単一キーインデックスを作成する
特定のコレクション内の単一のキーに対してのみクエリを実行する場合は、そのコレクションに対して単一キー インデックスを 1 つだけ作成する必要があります。たとえば、product コレクションの category にインデックスを作成できます。
db.products.createIndex( { "category": 1 } )
複数の異なるクエリをサポートする複合インデックスを作成する
時には 1 つのキーのみでクエリを実行し、時にはそのキーと 2 番目のキーを組み合わせてクエリを実行する場合、単一キー インデックスを作成するよりも複合インデックスを作成する方が効率的です。MongoDB は両方のクエリに複合インデックスを使用します。たとえば、category と item の両方にインデックスを作成できます。
db.products.createIndex( { "category": 1, "item": 1 } )
これにより、両方のオプションが可能になります。category のみをクエリすることも、category と item を組み合わせてクエリすることもできます。複数のフィールドに対する単一の複合インデックスは、それらのフィールドの「プレフィックス」サブセットを検索するすべてのクエリをサポートできます。
例
コレクションの次のインデックス:
{ x: 1, y: 1, z: 1 }
次のインデックスがサポートするクエリをサポートできます。
{ x: 1 } { x: 1, y: 1 }
プレフィックス インデックスの方がクエリ パフォーマンスが向上する場合があります。たとえば、z が大きな配列である場合などです。
{ x: 1, y: 1, z: 1 } インデックスは、次のインデックスと同じクエリの多くをサポートすることもできます。
{ x: 1, z: 1 }
また、{ x: 1, z: 1 } には追加の用途があります。次のインデックスが与えられている場合。
db.collection.find( { x: 5 } ).sort( { z: 1} )
{ x: 1, z: 1 } インデックスはクエリとソート操作の両方をサポートしますが、{ x: 1, y: 1, z: 1 } インデックスはクエリのみをサポートします。並べ替えについて詳しくは、「インデックスを使用してクエリ結果を並べ替える」を参照してください。
テキスト検索をサポートするインデックスを作成する
MongoDB Atlas でホストされているデータの場合、Atlas Search インデックスを使用した全文検索をサポートできます。 詳しくは「 Atlas Search インデックスの作成 」を参照してください。
自己管理型(Atlas 以外)の配置の場合、MongoDB はコレクション内の string コンテンツの検索をサポートするtextインデックス型を提供します。 自己管理型テキストインデックスについて詳しくは、「自己管理型配置のテキストインデックス 」を参照してください。
インデックスの使用と照合
文字列の比較にインデックスを使用するには、操作で同じ照合も指定する必要があります。つまり、照合順序を持つインデックスでは、操作で異なる照合順序が指定されている場合、インデックス付きフィールドで文字列比較を実行する操作をサポートできません。
警告
照合対応のインデックスキーは、照合のないインデックスのインデックスキーよりも大きくなる可能性があります。これは、照合付きで構成されたインデックスが ICU 照合キーを使用して並べ替え順序を実現するためです。