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

Qual é a maneira correta de indexar no MongoDB quando existe uma grande combinação de campos


Geralmente, os índices só são úteis se estiverem acima de um seletivo campo. Isso significa que o número de documentos que possuem um valor específico é pequeno em relação ao número total de documentos.

O que significa "pequeno" varia de acordo com o conjunto de dados e a consulta. Uma seletividade de 1% é bastante segura ao decidir se um índice faz sentido. Se um valor específico existir em, digamos, 10% dos documentos, realizar uma verificação de tabela pode ser mais eficiente do que usar um índice sobre o respectivo campo.

Com isso em mente, alguns de seus campos serão seletivos e alguns não serão. Por exemplo, suspeito que filtrar por "OK" não será muito seletivo. Você pode eliminar campos não seletivos das considerações de indexação - se alguém quiser todos os pedidos que estão "OK" sem outras condições, eles acabarão fazendo uma verificação de tabela. Se alguém quiser ordens que estejam "OK" e tenham outras condições, será usado qualquer índice aplicável a outras condições.

Agora que você ficou com campos seletivos (ou pelo menos um pouco seletivos), considere quais consultas são populares e seletivas. Por exemplo, talvez marca+tipo seja uma combinação dessas. Você pode adicionar índices compostos que correspondam a consultas populares que você espera que sejam seletivas.

Agora, o que acontece se alguém filtrar apenas por marca? Isso pode ser seletivo ou não, dependendo dos dados. Se você já tiver um índice composto em marca+tipo, deixaria para o banco de dados determinar se uma consulta apenas de marca é mais eficiente para preencher por meio do índice marca+tipo ou por meio de uma varredura de coleção.

Continue dessa maneira com outras consultas e campos populares.