2016-06-22 9 views
1

私はデータベースのインデックス作成を初めて行っています。私のアプリケーションは、単一および複数のフィールドMongoDB複数のフィールドを複数のクエリで最適化する

で検索以下「発見」と「更新」のクエリ、
   reference | timestamp | phone | username | key | Address 
update    x  |   |  |   |  |      
findOne     |  x  | x |   |  |   
find/limit:16    |  x  | x | x  |  | 
find/limit:11    |  x  |  |   | x | x 
find/limit:1/sort:-1  |  x  | x |   | x | x 
find      |  x  |  |   |  |     


1)update({"reference":"f0d3dba-278de4a-79a6cb-1284a5a85cde"}, ………. 
2)findOne({"timestamp":"1466595571", "phone":"9112345678900"}) 
3)find({"timestamp":"1466595571", "phone":"9112345678900", "username":"a0001a"}).limit(16) 
4)find({"timestamp":"1466595571", "key":"443447644g5fff", "address":"abc road, mumbai, india"}).limit(11) 
5)find({"timestamp":"1466595571", "phone":"9112345678900", "key":"443447644g5fff", "address":"abc road, mumbai, india"}).sort({"_id":-1}).limit(1) 
6)find({"timestamp":"1466595571"}) 

私が作成していたインデックス

db.coll.createIndex({ "reference": 1 }) //for 1st, 6th query 
db.coll.createIndex({ "timestamp": 1, "phone": 1, "username": 1 }) //for 2nd, 3rd query 
db.coll.createIndex({ "timestamp": 1, "key": 1, "address": 1, phone: 1 }) //for 4th, 5th query 

これが正しい方法ですがありますか?

は私が何を行っていることは正常に見えると思うあなた

答えて

0

ありがとう、私を助けてください。クエリでインデックスが使用されているか、インデックスが使用されているか、インデックスが有効かどうかを確認する方法の1つは、find()と一緒にexplain()関数を使用することです。例えば

db.coll.find({"timestamp":"1466595571"}).explain() 

は(もしあれば)を使用したものをインデックス詳細JSONドキュメントを返します。これに加えて、explainが "executionStats"を返すように指定することもできます。

db.coll.find({"timestamp":"1466595571"}).explain("executionStats") 

これは、結果セットと実行時間と他の有用なメトリックを調べるために調べたインデックスキーの数を示します。

関連する問題