MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

tempo di ricerca con indice> senza indice

In questo caso, l'indice non aiuta perché il set di risultati di corrispondenza è costituito da quasi l'intera raccolta. Ciò significa che deve caricare nella RAM e attraversare la maggior parte dell'indice, nonché caricare nella RAM e attraversare i documenti stessi.

Senza l'indice, eseguirebbe semplicemente una scansione della tabella, ispezionando ogni documento e restituendo se abbinato.

In casi come questo in cui una query restituirà quasi un'intera raccolta, un indice potrebbe non essere utile.

L'aggiunta di un .limit() accelererà la query. Puoi anche forzare Query Optimizer a non utilizzare l'indice con .hint():

db.collection.find().hint({$natural:1})

Puoi anche forzare la query a fornire i valori dei risultati direttamente dall'indice stesso limitando i campi selezionati solo a quelli che hai indicizzato. Ciò consente di evitare la necessità di caricare documenti dopo aver eseguito la scansione dell'indice.

Prova questo e vedi se l'output di spiegazione indica "indexOnly":true

db.numbers.find({number: {$gt: 10000}}, {number:1}).explain()

Dettagli qui:

http://www.mongodb.org /display/DOCS/Recupero+di+un+sottoinsieme+di+campi#Recupero di un sottoinsiemediindici coperti da campi