Como melhorar consultas com indexação MongoDB

Como Melhorar Consultas Com Indexacao Mongodb



Aumentar a velocidade de consulta é essencial para o MongoDB e todos os outros sistemas de banco de dados. Ao construir estruturas de dados que ajudam o MongoDB a identificar registros mais rapidamente, a indexação é uma abordagem poderosa para acelerar e otimizar pesquisas. Os índices incluem cópias de alguns dados dos registros para tornar as consultas mais eficazes. Isso agiliza o esforço envolvido na resposta às solicitações no MongoDB. Neste guia, discutiremos o uso de índices com a ajuda de diferentes tipos de indexação.

Criar coleção

Antes de usar índices, temos que criar uma nova coleção em nosso MongoDB. Já criamos um e inserimos 10 documentos, denominados “Dummy”. A função find() do MongoDB exibe todos os registros da coleção “Dummy” na tela do shell do MongoDB abaixo.

teste> db.Dummy.find()







Escolha o tipo de indexação

Antes de estabelecer um índice, você deve primeiro determinar as colunas que serão comumente utilizadas nos critérios de consulta. Os índices apresentam bom desempenho em colunas que são frequentemente filtradas, classificadas ou pesquisadas. Campos com grande cardinalidade (muitos valores diferentes) costumam ser excelentes opções de indexação. Aqui estão alguns exemplos de código para diferentes tipos de índice.



Exemplo 01: Índice de Campo Único

É provavelmente o tipo de índice mais fundamental, que indexa uma única coluna para aumentar a velocidade da consulta nessa coluna. Este tipo de índice é utilizado para consultas nas quais você utiliza um único campo-chave para consultar os registros da coleção. Suponha que você use o campo “type” para consultar os registros da coleção “Dummy” dentro da função find conforme abaixo. Este comando examinaria toda a coleção, o que pode levar muito tempo para que grandes coleções sejam processadas. Portanto, precisamos otimizar o desempenho desta consulta.



teste> db.Dummy.find({tipo: 'emp' })





Os registros da coleção Dummy acima foram encontrados usando o campo “tipo”, ou seja, contendo uma condição. Portanto, o índice de chave única pode ser utilizado aqui para otimizar a consulta de pesquisa. Portanto, utilizaremos a função createIndex() do MongoDB para criar um índice no campo “type” da coleção “Dummy”. A ilustração do uso desta consulta mostra a criação bem-sucedida de um índice de chave única denominado “type_1” no shell.

teste> db.Dummy.createIndex({ tipo: 1 })

Vamos usar a consulta find() assim que ela usar o campo “tipo”. A operação será significativamente mais rápida agora do que a função find() usada anteriormente, pois o índice está em vigor porque o MongoDB pode utilizar o índice para recuperar rapidamente os registros com o cargo solicitado.



teste> db.Dummy.find({tipo: 'emp' })

Exemplo 02: Índice Composto

Podemos querer procurar itens com base em vários critérios em determinadas circunstâncias. A implementação de um índice composto para esses campos pode ajudar a melhorar o desempenho da consulta. Digamos que, desta vez, você queira pesquisar na coleção “Dummy” usando vários campos contendo diferentes condições de pesquisa conforme a consulta é exibida. Esta consulta tem procurado registros da coleção onde o campo “type” está definido como “emp” e o campo “sal” é maior que 350.

O operador lógico $gte foi usado para aplicar a condição ao campo “sal”. Após pesquisa em todo o acervo, que é composto por 10 registros, foram retornados dois registros.

teste> db.Dummy.find({tipo: 'emp' , sal: {$gte: 350 } })

Vamos criar um índice composto para a consulta mencionada. Este índice composto possui campos “type” e “sal”. Os números “1” e “-1” representam ordem crescente e decrescente, respectivamente, para os campos “tipo” e “sal”. A sequência das colunas do índice composto é importante e deve corresponder aos padrões de consulta. O MongoDB deu o nome “type_1_sal_-1” a este índice composto conforme exibido.

teste> db.Dummy.createIndex({tipo: 1 , vai:- 1 })

Depois de usar a mesma consulta find() para pesquisar registros com o valor do campo “type” como “emp” e o valor do campo “sal” maior que igual a 350, obtivemos a mesma saída com uma ligeira mudança na ordem em comparação com o resultado da consulta anterior. O registro de maior valor para o campo “sal” está agora em primeiro lugar, enquanto o menor está no menor de acordo com o “-1” definido para o campo “sal” no índice composto acima.

teste> db.Dummy.find({tipo: 'emp' , sal: {$gte: 350 } })

Exemplo 03: Índice de Texto

Às vezes, você pode se deparar com uma situação em que deve lidar com um grande conjunto de dados, como grandes descrições de produtos, ingredientes, etc. Um índice de texto pode ser útil para fazer pesquisas de texto completo em um grande campo de texto. Por exemplo, criamos uma nova coleção chamada “Test” em nosso banco de dados de teste. Inseriu um total de 6 registros nesta coleção usando a função insertMany() conforme a consulta find() abaixo.

teste> db.Test.insertMany([

{nome: 'Ana' , do: “Ela mora em Londres e é uma boa professora” },

{nome: 'Roberto' , do: 'Ele é um jogador de futebol incrível' },

{nome: 'de' , do: 'Talvez esteja viajando por Dubai' },

{nome: 'Jacó' , do: 'Ele é alucinante e rico.' },

{nome: 'Ciliano' , do: 'Um super começo de filme ganhou fama em poucos segundos' },

{nome: 'Ken' , do: 'Amante de comida. Ela também pode comer você.' }

])

Agora, criaremos um índice de texto no campo “Des” desta coleção, empregando a função createIndex() do MongoDB. A palavra-chave “texto” no valor do campo exibe o tipo de índice, que é um índice de “texto”. O nome do índice, des_text, foi gerado automaticamente.

teste> db.Test.createIndex({des: 'texto' })

Agora, a função find() foi usada para realizar a “pesquisa de texto” na coleção através do índice “des_text”. O operador $search foi utilizado para procurar a palavra “comida” nos registros de coleta e exibir esse registro específico.

teste> db.Test.find({ $texto: { $pesquisa: 'comida' }});

Verifique os índices:

Você pode verificar e listar todos os índices aplicados de diferentes coleções em seu MongoDB. Para isso, use o método getIndexes() junto com o nome de uma coleção na tela do shell do MongoDB. Usamos este comando separadamente para as coleções “Test” e “Dummy”. Isso mostra todas as informações necessárias sobre os índices integrados e definidos pelo usuário em sua tela.

teste> db.Test.getIndexes()

teste> db.Dummy.getIndexes()

Índices de queda:

É hora de excluir os índices que foram criados anteriormente para a coleção usando a função dropIndex() junto com o mesmo nome de campo ao qual o índice foi aplicado. A consulta abaixo mostra que o índice único foi removido.

teste> db.Dummy.dropIndex({tipo: 1 })

Da mesma forma, o índice composto pode ser eliminado.

teste> índice db.Dummy.drop({tipo: 1 , vai: 1 })

Conclusão

Ao acelerar a recuperação de dados do MongoDB, a indexação é essencial para aumentar a eficiência das consultas. Na falta de índices, o MongoDB deve pesquisar toda a coleção em busca de registros correspondentes, o que se torna menos eficaz à medida que o tamanho do conjunto aumenta. A capacidade do MongoDB de descobrir rapidamente os registros corretos utilizando a estrutura do banco de dados de índice acelera o processamento de consultas quando a indexação adequada é usada.