:priceフィールドと:qtyフィールドを持つItemドキュメントがあるとします。特定の:price AND:qtyに一致するすべてのドキュメントを検索したい場合もあれば、:price自体または:qty自体のいずれかになる場合もあります。
:priceキーと:qtyキーのインデックスを作成しましたが、両方に複合インデックスを作成する必要がありますか、それとも単一キーのインデックスで十分ですか?
編集:mongodbサイトでこの記事が非常に役立つことがわかりました:
:priceフィールドと:qtyフィールドを持つItemドキュメントがあるとします。特定の:price AND:qtyに一致するすべてのドキュメントを検索したい場合もあれば、:price自体または:qty自体のいずれかになる場合もあります。
:priceキーと:qtyキーのインデックスを作成しましたが、両方に複合インデックスを作成する必要がありますか、それとも単一キーのインデックスで十分ですか?
編集:mongodbサイトでこの記事が非常に役立つことがわかりました:
のインデックスは、のprice
クエリに役立ちますprice
。のインデックスは、のqty
クエリに役立ちますqty
。のインデックスprice
とは、とのANDクエリのqty
クエリに役立ちます。つまり、1つの価格で2つのインデックスを取得するようなものです。ただし、のクエリには役立ちません。 price
price
qty
qty
インデックスの数を最小限に抑える必要があるため、単一キーのインデックスの1つを削除し、そのキーで始まる複合インデックスを作成します。
原則として、、、、およびx
でクエリを実行する場合は、のようなインデックスが必要です。このインデックスにより、次のクエリが高速になります。y
z
{x:1, y:1, z:1}
db.foo.find({x : ..., y : ..., z : ...})
db.foo.find({x : ..., y : ...})
db.foo.find({x : ...})
これらのクエリは高速になりません。
db.foo.find({y : ..., z : ...})
db.foo.find({y : ...})
したがって、クエリにインデックスの開始キーが含まれていることを確認してください。
:price自体または:qty自体が必要な場合、複合インデックスは機能しません。