MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

tempo de busca com índice> sem índice


Nesse caso, o índice não ajuda porque seu conjunto de resultados correspondente consiste em quase toda a coleção. Isso significa que ele precisa carregar na RAM e percorrer a maior parte do índice, além de carregar na RAM e percorrer os próprios documentos.

Sem o índice, ele faria apenas uma varredura de tabela, inspecionando cada documento e retornando se houver correspondência.

Em casos como esse em que uma consulta retornará quase uma coleção inteira, um índice pode não ser útil.

Adicionar um .limit() irá acelerar a consulta. Você também pode forçar o otimizador de consulta a não usar o índice com .hint():
db.collection.find().hint({$natural:1})

Você também pode forçar a consulta a fornecer os valores de resultado diretamente do próprio índice, limitando os campos selecionados apenas aos que você indexou. Isso permite evitar a necessidade de carregar quaisquer documentos após fazer a varredura de índice.

Tente isso e veja se a saída de explicação indica "indexOnly":true
db.numbers.find({number: {$gt: 10000}}, {number:1}).explain()

Detalhes aqui:

http://www.mongodb.org /display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-CoveredIndexes