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

O índice MongoDB/Mongoose torna a consulta mais rápida ou diminui a velocidade?

Você está lendo errado


Você está interpretando mal a intenção do bloco citado sobre o que .ensureIndex() ( agora obsoleto, mas ainda chamado pelo código do mangusto ) realmente faz aqui no contexto.

No mangusto, você define um índice no nível do esquema ou do modelo conforme apropriado ao seu design. O que o mangusto "automaticamente" faz por você é na conexão, ele inspeciona cada modelo registrado e então chama o .ensureIndex() apropriado métodos para as definições de índice fornecidas.

O que isso realmente faz?

Bem, na maioria dos casos, estar depois de você já ter iniciado seu aplicativo antes e o .ensureIndexes() método foi executado é Absolutamente Nada . Isso é um pouco exagerado, mas parece mais ou menos verdadeiro.

Como a definição de índice já foi criada na coleção do servidor, uma chamada subsequente não faz nada. Ou seja, não descarta o índice e "recria". Portanto, o custo real é basicamente nada, uma vez que o próprio índice foi criado.

Criando índices


Portanto, como o mangusto é apenas uma camada no topo da API padrão, o createIndex() contém todos os detalhes do que está acontecendo.

Há alguns detalhes a serem considerados aqui, como que uma compilação de índice pode acontecer em "fundo" e, embora isso seja menos intrusivo para seu aplicativo, ele tem seu próprio custo. Notavelmente, o tamanho do índice da geração de "fundo" será maior do que se você o construísse em primeiro plano, bloqueando outras operações.

Além disso, todos os índices têm um custo, principalmente em termos de uso de disco, bem como um custo adicional de gravação de informações adicionais fora dos dados da coleção em si.

As vantagens de um índice são que é muito mais rápido "procurar" por valores contidos em um índice do que procurar em toda a coleção e corresponder às condições possíveis.

Esses são os "trade-offs" básicos associados aos índices.

Padrão de implantação


Voltar para o bloco citado da documentação, há uma intenção real por trás desse conselho.

É típico em padrões de implantação e particularmente com migrações de dados fazer as coisas nesta ordem:
  1. Preencher dados em coleções/tabelas relevantes
  2. Ative índices nos dados da coleção/tabela relevantes para suas necessidades

Isso ocorre porque há um custo envolvido com a criação do índice e, como mencionado anteriormente, é desejável obter o tamanho ideal da construção do índice, bem como evitar que cada inserção de documento também tenha a sobrecarga de escrever uma entrada de índice quando você estiver fazendo esse "load" em massa.

Então é para isso que servem os índices, esses são os custos e benefícios e a mensagem na documentação do mangusto é explicada.

Em geral, porém, sugiro ler sobre Índices de banco de dados pelo que são e pelo que fazem. Pense em entrar em uma biblioteca para encontrar um livro. Há um índice de cartão lá na entrada. Você anda pela biblioteca para encontrar o livro que deseja? Ou você procura no índice do cartão para descobrir onde está? Esse índice levou algum tempo para criar e também mantê-lo atualizado, mas poupa a "você" o tempo de percorrer toda a biblioteca apenas para encontrar seu livro.