23

:priceフィールドと:qtyフィールドを持つItemドキュメントがあるとします。特定の:price AND:qtyに一致するすべてのドキュメントを検索したい場合もあれば、:price自体または:qty自体のいずれかになる場合もあります。

:priceキーと:qtyキーのインデックスを作成しましたが、両方に複合インデックスを作成する必要がありますか、それとも単一キーのインデックスで十分ですか?

編集:mongodbサイトでこの記事が非常に役立つことがわかりました:

http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ

4

2 に答える 2

41

のインデックスは、のpriceクエリに役立ちますprice。のインデックスは、のqtyクエリに役立ちますqty。のインデックスpriceとは、とのANDクエリのqtyクエリに役立ちます。つまり、1つの価格で2つのインデックスを取得するようなものです。ただし、のクエリには役立ちません。 pricepriceqtyqty

インデックスの数を最小限に抑える必要があるため、単一キーのインデックスの1つを削除し、そのキーで始まる複合インデックスを作成します。

原則として、、、、およびxでクエリを実行する場合は、のようなインデックスが必要です。このインデックスにより、次のクエリが高速になります。yz{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 : ...})

したがって、クエリにインデックスの開始キーが含まれていることを確認してください。

于 2010-06-11T13:03:04.567 に答える
-6

:price自体または:qty自体が必要な場合、複合インデックスは機能しません。

于 2010-06-10T17:29:34.310 に答える