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

MongoDB:A ordem dos índices e a ordem da consulta devem corresponder?


A ordem das condições em sua consulta não afeta se ela pode usar um índice ou não.

por exemplo, estrutura de documento típica:
{
    "FieldA" : "A",
    "FieldB" : "B"
}

Se você tiver um índice composto em A e B :
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})

Em seguida, ambas as consultas a seguir poderão usar esse índice:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})

Portanto, a ordenação das condições na consulta não impede que o índice seja usado - o que acho que é a pergunta que você está fazendo.

Você pode testar isso facilmente testando as 2 consultas no shell e adicionando .explain() após o achado. Eu só fiz isso para confirmar, e ambos mostraram que o índice composto foi usado.

no entanto, se você executar a consulta a seguir, isso NÃO usará o índice, pois o CampoA não está sendo consultado:
db.MyCollection.find({FieldB : "B"})

Portanto, é a ordenação dos campos no índice que define se ele pode ser usado por uma consulta e não a ordenação dos campos na própria consulta (era a isso que Lucas se referia).