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

Consulta simples do MongoDB muito lenta, embora o índice esteja definido


Você não tem nenhum índice que o mongo usará automaticamente para isso, então está fazendo uma varredura completa da tabela.

Conforme mencionado nos documentos

Por que

Se você tiver um índice em a,b - e pesquisar por a sozinho - um índice será usado automaticamente. Isso ocorre porque é o início do índice (o que é rápido de fazer), o db pode simplesmente ignorar o restante do valor do índice.

Um índice em a,b é ineficiente ao pesquisar por b sozinho simplesmente porque não dá a possibilidade de usar o índice pesquisando com "começa com thisfixedstring".

Então, ou:
  • Inclua _reference_1_id na consulta (provavelmente irrelevante)
  • OU adicione um índice em _reference_2_id (se você consulta pelo campo com frequência)
  • OU use uma dica

Dica

Provavelmente sua opção de menor custo agora.

Adicione uma dica de consulta para forçar o uso de seu _reference_1_id_1__reference_2_id_1_id_1 índice. O que provavelmente será muito mais rápido do que uma verificação completa da tabela, mas ainda muito mais lento do que um índice que começa com o campo que você está usando na consulta.

ou seja
db.mycoll
    .find({"_reference_2_id" : ObjectId("jkl7890123456")})
    .hint("_reference_1_id_1__reference_2_id_1_id_1");