2016-04-06 6 views
0

私はmongodbでクエリを最適化しようとしています。mongodbでのクエリの最適化

通常のSQLクエリでは、where句が適用される順序があります。例えば、 select * from employees where department="dept1" and floor=2 and sex="male"、ここでは最初にdepartment="dept1"が適用され、次にfloor=2が適用され、最後にsex="male"が適用されます。

私はそれがmongodbで同様のやり方で起こっているのだろうと思っていました。 など。 DbObject search = new BasicDbObject("department", "dept1").put("floor",2).put("sex", "male"); ここで一致句が最初に適用されるか、infactはmongoがこのようにして動作します。

この質問は、基本的に私のSQLデータベースの背景から発生します。

助けてください。

答えて

0

インデックスがない場合は、必要なドキュメントを見つけるためにフルコレクション(コレクションスキャン)をスキャンする必要があります。ドキュメントとして

db.employees.createIndex({ "department": 1, "floor": 1, "sex" : 1 }) 

https://docs.mongodb.org/manual/core/index-compound/

db.products.createIndex({「項目注文[部門、床や性別]を適用したい場合はあなたのケースでは、この複合インデックスを作成する必要があります":1、" stock ":1)

複合インデックスのフィールドの順序は非常に重要です。 上記の例では、索引には、最初に項目フィールドの値によってソートされた文書 への参照が含まれ、各フィールドには の項目フィールドがストック項目の値でソートされています。

+0

'db.employees.createIndex({" department ":" floor ":1、" sex ":1})'のような複合インデックスは 'のフィールドのサブセットでクエリしています。 "{" department ":" dept "1、" floor ":2}'または '{" floor ":2}のようなインデックス –

+0

私の回答の参照を確認してスクロールダウンhttps://docs.mongodb.org/ manual/core/index-compound /#プレフィックス。あなたのケースでは、索引{"department":1、 "floor":1、 "sex":1}は、(1)dep、(2)dep/floor、(3)dep/floor /性別すぐに床で検索したい場合は、別のインデックスを作成する必要があります – zeugor

+0

さらにもう1つ - インデックスがないと仮定し、一致句が最初に適用されます。そのための規則はありますか? –