複合インデックス
複合インデックスは、コレクション内の各ドキュメントにある 2 つ以上のフィールドからデータを収集してソートします。インデックスの最初のフィールドによりデータはグループ化され、その後は後続のフィールドによりグループ化されます。
たとえば、次の画像は、ドキュメントが最初に userid
によって昇順(アルファベット順)でグループ化されている複合インデックスを示しています。次に、各 userid
の scores
が降順でソートされます。
よくクエリされるフィールドのインデックスを作成すると、カバード クエリになる可能性が高まります。カバード クエリとは、インデックスの使用で処理が完了し、ドキュメントを調査する必要がないため、パフォーマンスが大幅に向上するクエリです。
複合インデックスを作成するには、次のプロトタイプを使用します。
db.<collection>.createIndex( { <field1>: <sortOrder>, <field2>: <sortOrder>, ... <fieldN>: <sortOrder> } )
MongoDB Atlas でホストされる配置用 UI に複合インデックスを作成、管理できます。
ユースケース
アプリケーションが複数のフィールドを含むクエリを繰り返し実行する場合は、複合インデックスを作成してそのクエリのパフォーマンスを向上させることができます。たとえば、食料品店のマネージャーは、在庫商品を名前と数量で調べて、どの商品の在庫が少ないかを判断する必要が頻繁にあります。item
フィールドと quantity
フィールドの両方に複合インデックスを作成して、クエリのパフォーマンスを向上させることができます。
よくクエリされるフィールドに複合インデックスを作成すると、それらのクエリを対象とする可能性が高くなります。対象のクエリとは、ドキュメントを検査することなく、インデックスを使用して完全に満たすことができるクエリです。これにより、クエリのパフォーマンスが最適化されます。
はじめる
複合インデックスを作成するには、「複合インデックスの作成」を参照してください。
詳細
このセクションでは、複合インデックスの技術的詳細と制限について説明します。
フィールド制限
1 つの複合インデックスには最大 32 個のフィールドを含めることができます。
フィールドの順序
インデックス フィールドの順序は、複合インデックスの有効性に影響します。複合インデックスには、インデックス内のフィールドの順序に従ってドキュメントへの参照が含まれます。効率的な複合インデックスを作成するには、ESR(Equality、Sort、Range)ルールに従ってください。
並び替え順
インデックスには、フィールドへの参照が昇順(1
)または降順(-1
)のソート順序でストアされます。複合インデックスの場合、ソート順序によって、インデックスがソート操作をサポートしているかどうかが決まります。詳細については、「複合インデックスのソート順序」を参照してください。
ハッシュ インデックス フィールド
複合インデックスには、単一のハッシュされたインデックス フィールド を含めることができます。
インデックスのプレフィックス
インデックスのプレフィックスは、インデックス フィールドの開始サブセットです。複合インデックスでは、インデックスのプレフィックスに含まれるすべてのフィールドに対するクエリがサポートされます。
たとえば、次の複合インデックスについて考えてみます。
{ "item": 1, "location": 1, "stock": 1 }
インデックスには以下のようなプレフィックスがあります。
{ item: 1 }
{ item: 1, location: 1 }
MongoDB では、次のフィールドの組み合わせに対するクエリをサポートするために、複合インデックスを使用できます。
item
item
およびlocation
item
、location
やstock
MongoDB では、item
フィールドがプレフィックスに対応しているため、インデックスを使用して item
フィールドと stock
フィールドに対するクエリをサポートすることもできます。ただし、このクエリをサポートできるのはインデックス内の item
フィールドのみです。クエリには、location
が後に続いている stock
フィールドは使用できません。
インデックス フィールドは順番に解析されます。クエリでインデックスのプレフィックスが省略された場合、そのプレフィックスに続くインデックス フィールドは使用できません。
MongoDB では、次のフィールドの組み合わせに対するクエリをサポートするために、複合インデックスを使用することはできません。
location
stock
location
およびstock
item
フィールドがない場合、前述のフィールドの組み合わせはいずれもプレフィックス インデックスに対応しません。
スパース複合インデックス
複合インデックスには、さまざまなタイプのスパースインデックスを含めることができます。インデックスのタイプの組み合わせによって、複合インデックスがドキュメントと一致する方法が決まります。
下表には、さまざまなタイプのスパースインデックスを含む複合インデックスの動作がまとめられています。
複合インデックスの構成要素 | 複合インデックスの動作 |
---|---|
Ascending indexes Descending indexes | 1 つ以上のキーの値を含むドキュメントのみ、インデックスが作成されます。 |
geospatial フィールドのいずれかに値が含まれている場合にのみ、ドキュメントのインデックスが作成されます。昇順または降順インデックス形式のドキュメントのインデックスは作成されません。 | |
text フィールドのいずれかに一致するドキュメントのみ、インデックスが作成されます。昇順または降順インデックス形式のドキュメントのインデックスは作成されません。 |
詳細
効率的な複合インデックスの作成方法については、「ESR(Equality、Sort、Range)ルール」を参照してください。