2017-01-16 3 views

答えて

1

私はあなたのためにprefixesの別の索引{a:1}を作成する必要はありませんだと思います。

インデックスのプレフィックスはインデックスフィールドの開始サブセットです。例えば、以下の化合物の指標を考慮してください。

{ "item": 1, "location": 1, "stock": 1 } 

インデックスは、次のインデックス接頭辞を持っています

{ item: 1 } 
{ item: 1, location: 1 } 

複合インデックスのために、MongoDBはインデックスプレフィックスのクエリをサポートするためにインデックスを使用することができます。このように、MongoDBは、以下のフィールドにクエリのインデックスを使用することができます。

    item
  • フィールド、
  • item
  • フィールドとlocationフィールド、
  • item
  • フィールドとlocationフィールドとstockフィールド。

そして、複合インデックスを作成するには、[1]、より効率的です。
MongoDBはインデックス全体またはインデックスプレフィックスのいずれかの交差を使用できます[2]

1

MongoDBのドキュメントCreate a compound indexをチェックしてください。

次の操作項目と在庫フィールドの昇順インデックス作成:すべてのインデックスフィールドに一致するクエリをサポートすることに加えて

db.products.createIndex({ "item": 1, "stock": 1 }) 

を 化合物インデックスがで一致クエリをサポートすることができ接頭辞はインデックスフィールドの です。複合インデックスのために

db.products.find({ item: "Banana" }) 
db.products.find({ item: "Banana", stock: { $gt: 5 } }) 

、MongoDBのは、インデックスの接頭辞にクエリをサポートするために、インデックスを使用することができますですは、インデックスが としてitemフィールド上のクエリだけでなく、両方itemstockフィールドをサポートしています。ところで

、あなたは複合インデックスを作成した場合:

{ "item": 1, "location": 1, "stock": 1 } 

MongoDBは、次のフィールドにクエリのインデックスを使用することができます。

  • 項目フィールド、
  • 項目欄そして位置フィールド、
  • 項目フィールドと、位置フィールドと在庫フィールド。

しかし、itemstockでは効率的ではありません。

これが役に立ちます。

+0

これは本当に私の質問に答えるものではありませんが、あなたのリンクはそうです。 {x:1、y:1、z:1}次のインデックスがサポートするクエリをサポートできます。{x:1}、{x:1、y:1} " – RainingChain

+0

@RainingChainそのために、私は自分の答えを更新しました。 – McGrady

関連する問題