2010-06-10 11 views
22

dire che ho un documento Item con: prezzo e: qty campi. A volte voglio trovare tutti i documenti che corrispondono a un dato: prezzo AND: qty, e in altri momenti sarà: prezzo da solo o: qty da solo.quando indicizzare su più chiavi in ​​mongodb

Ho già indicizzato i tasti: prezzo e: qty, ma devo anche creare un indice composto su entrambi insieme o gli indici delle singole chiavi sono sufficienti?

Edit: ho trovato questo articolo sul sito MongoDB molto utile:

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

+0

sì, mi piacerebbe sapere cosa pensa l'altro ppl. Ho una collezione in cui posso cercare tra più "campi". Ovviamente _id è indicizzato, ma ho anche una manciata di altri. – luckytaxi

risposta

41

Un indice su price aiuta con le domande su price. Un indice su qty aiuta con le domande su qty. Un indice su price e qty aiuta con le domande su price e le query su price e qty. Quindi, è come ottenere due indici al prezzo di uno. Tuttavia, non sarà di aiuto per le query su qty.

È necessario ridurre al minimo il numero di indici disponibili, quindi eliminare uno degli indici a chiave singola e creare un indice composto a partire da quella chiave.

Come regola generale, se si sta facendo una query su x, y, e z, si dovrebbe avere un indice come {x:1, y:1, z:1}. Questo indice farà le seguenti query veloce:

db.foo.find({x : ..., y : ..., z : ...}) 
db.foo.find({x : ..., y : ...}) 
db.foo.find({x : ...}) 

Non farà queste query veloce:

db.foo.find({y : ..., z : ...}) 
db.foo.find({y : ...}) 

Quindi, assicurarsi che la query ha la chiave di avviamento (s) di un indice in esso.

+5

Questo è cambiato da 1.6+, ora Mongo può usare qualsiasi chiave da un indice composto: http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeysIndexes –

+2

@Zsolt: true in molti casi, ma solo se accennato esplicitamente. – kristina

+0

anzi, ho dimenticato di aggiungerlo. –

-5

se avete bisogno di: prezzo da solo o: qty da solo quindi un indice composto non funzionerà.

+0

Al momento ho singoli indici, voglio sapere se ho anche bisogno di un indice composto per la query che gira su entrambi: price e: qty – Evan

+3

Non è vero. L'indice composto: price +: qty aiuterà per: prezzo da solo poiché: il prezzo è il primo dell'indice composto. –

Problemi correlati