2016-06-22 5 views
1

Ich bin neu in der Datenbankindexierung. Meine Anwendung hat folgende „finden“ und „update“ Abfragen, gesucht durch einzelne und mehrere FelderOptimieren von MongoDB Indizierung mehrerer Felder mit mehreren Abfragen

   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"}) 

Ich schaffe Index

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 

Ist dies der richtige Weg?

Bitte helfen Sie mir

Danke

Antwort

0

Ich denke, was Sie sieht gut getan. Eine Möglichkeit zu überprüfen, ob Ihre Abfrage einen Index verwendet, welcher Index verwendet wird und ob der Index effektiv ist, besteht darin, die explain()-Funktion neben Ihrer find() zu verwenden.

Zum Beispiel:

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

ein json Dokument zurück, die Details, welchen Index (falls vorhanden) verwendet wurde. Zusätzlich können Sie angeben, dass die EXPLAIN-Anweisung "executionStats" z.

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

Dies wird Ihnen sagen, wie viele Index sowie die Ausführungszeit und andere nützliche Metriken gesetzt Tasten wurden untersucht das Ergebnis zu finden.