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

Como o MongoDB escolhe os planos candidatos


Se uma consulta puder ser satisfeita por vários índices definidos na coleção, o MongoDB testará todos os índices aplicáveis ​​em paralelo. O primeiro índice que pode retornar 101 resultados será selecionado pelo planejador de consulta. Existem outras facetas para a seleção do índice, mas em geral isso é verdade de acordo com o Otimização de consulta documentação.

Este método de seleção de índice pode selecionar um índice sub-ótimo. Isso ocorre porque, do ponto de vista do MongoDB, você tem vários índices que descrevem a mesma coisa. Para mitigar a seleção de índice abaixo do ideal que você observou, você pode fazer:

  1. Remova todos os outros índices que você descobrir que não são ideais.

    Isso é para garantir que o planejador de consulta não tenha outra escolha, exceto escolher índices que você adaptou para sua consulta.

  2. Use a hint() método

    hint() permite que você diga explicitamente ao MongoDB para usar o índice prescrito para a consulta. Por exemplo:
    db.tasks.find(...).hint({project: 1, created_by: 1})
    

    Consulte https://docs.mongodb.com/v2. 6/reference/operator/meta/hint/ para mais informações sobre hint() .

Outra nuance em sua consulta é que ela inclui um $or operador. Nesse caso, todos os termos no $or expressão deve ter um índice associado a ela , caso contrário o MongoDB irá realizar uma varredura de coleção (BasicCursor nos termos do MongoDB 2.6). Isso é explicado em mais detalhes em https://docs .mongodb.com/v2.6/reference/operator/query/or/#behaviors