Perché gli indici
Comprendi due punti chiave.
- Sebbene un indice sia migliore di nessun indice, l'indice corretto è molto migliore di entrambi.
- MongoDB utilizzerà solo un indice per query, creando indici composti con il corretto ordinamento dei campi che probabilmente si desidera utilizzare.
Gli indici non sono gratuiti. Prendono memoria e impongono una riduzione delle prestazioni durante gli inserimenti, gli aggiornamenti e le eliminazioni. Normalmente il calo delle prestazioni è trascurabile (soprattutto se paragonato all'aumento delle prestazioni di lettura), ma ciò non significa che non possiamo essere intelligenti nel creare i nostri indici.
Come indici
Identificare il gruppo di campi da indicizzare insieme significa comprendere le query che stai eseguendo. L'ordine dei campi utilizzati per creare il tuo indice è fondamentale. La buona notizia è che, se sbagli l'ordine, l'indice non verrà utilizzato affatto, quindi sarà facile individuarlo spiegando.
Perché ordinare
Le tue query potrebbero richiedere l'ordinamento. Ma l'ordinamento può essere un'operazione costosa, quindi è importante trattare i campi su cui stai ordinando proprio come un campo su cui stai interrogando. Quindi sarà più veloce se ha index. Tuttavia, c'è una differenza importante, il campo che stai ordinando deve essere l'ultimo campo del tuo indice. L'unica eccezione a questa regola è che se anche il campo fa parte della query, la regola deve essere l'ultima non si applica.
Come ordinare
È possibile specificare un ordinamento su tutte le chiavi dell'indice o su un sottoinsieme; tuttavia, le chiavi di ordinamento devono essere elencate nello stesso ordine in cui appaiono nell'indice. Ad esempio, un modello di chiave di indice {a: 1, b: 1} può supportare un ordinamento su {a: 1, b: 1} ma non su {b: 1, a: 1}.
L'ordinamento deve specificare la stessa direzione di ordinamento (cioè ascendente / discendente) per tutte le sue chiavi come modello di chiave di indice o specificare la direzione di ordinamento inversa per tutte le sue chiavi come modello di chiave di indice. Ad esempio, un pattern di chiave di indice {a: 1, b: 1} può supportare un ordinamento su {a: 1, b: 1} e {a: -1, b: -1} ma non su {a: -1 , b: 1}.
Supponiamo che ci siano questi indici:
{ a: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 1, c: 1 }
Example Index Used
db.data.find().sort( { a: 1 } ) { a: 1 }
db.data.find().sort( { a: -1 } ) { a: 1 }
db.data.find().sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: -1, b: -1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: 1, b: 1, c: 1 } ) { a: 1, b: 1, c: 1 }
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
1, 3, 2, 6, 5, 4, 7
?