フィールドaとbでフィルタリングし、次にcで順序付けするクエリがある場合、a、b、cに個別のインデックスを作成する必要がありますか、それとも実際に(a、b、c)の複合インデックスを作成する必要がありますか?また、クエリのシーケンスはインデックスのシーケンスと一致する必要がありますか?つまり、クエリのフィルターシーケンスがフィルターb、フィルターc、次にaで順序付けされている場合、複合インデックス(b、c、a)を使用する方がよいでしょうか。
2 に答える
2
MongoDBは現在、クエリごとに1つのインデックスのみを使用するため、複合インデックスが必要になります。
インデックスパラメータの順序は重要ですが、必ずしも質問で言及した方法ではありません。
フィルタリングが最初に行われるため、インデックスが(c、b、a)の場合、特にコレクションに多数のアイテムがある場合は、フィルタリングにはあまり役立ちません。並べ替えに使用するフィールドは、インデックスの最後に指定する必要があります。
したがって、インデックスは(a、b、c)または(b、a、c)のいずれかである必要があります。それらのどれが選択性に依存する必要がありますか?言い換えると、どのフィールドがより速く一致しないアイテムを排除しますか?
bに10,000の可能性のある値があり、aに2つの可能性のある値しかない場合、インデックスは(b、a、c)になります。逆に、aに可能な値がもっとたくさんある場合は、おそらく(a、b、c)になります。2つのフィールドのクエリからドキュメントを削除する機能がほぼ同じである場合、それほど重要ではありません。
于 2012-02-01T07:38:42.190 に答える
1
これ以上のすべては、ドキュメントで回答されています。複合インデックスのセクションを参照してください。
クエリパラメータの順序は重要ではありません。
于 2012-02-01T07:09:04.363 に答える