Indexes são muito importantes em qualquer base de dados, e com MongoDB não é diferente. Com o uso de Índices, realizar consultas no MongoDB torna-se mais eficiente.
Se você tivesse uma coleção com milhares de documentos sem índices, e então você consulta para encontrar certos documentos, então nesse caso o MongoDB precisaria escanear toda a coleção para encontrar os documentos. Mas se você tivesse índices, o MongoDB usaria esses índices para limitar o número de documentos que teriam que ser pesquisados na coleção.
Indexes são conjuntos de dados especiais que armazenam uma parte dos dados da coleção. Como os dados são parciais, torna-se mais fácil a leitura destes dados. Este conjunto parcial armazena o valor de um campo específico ou um conjunto de campos ordenados pelo valor do campo.
Neste tutorial, você aprenderá –
- Obtendo o Impacto dos Índices
- Como Criar Índices: createIndex()
- Como Encontrar Índices: getindexes()
- Como Largar Índices: dropindexes()
Entendendo o Impacto dos Índices
Agora, embora desde a introdução vimos que os índices são bons para consultas, mas ter muitos índices pode retardar outras operações como a operação Inserir, Excluir e Atualizar.
Se houver operações frequentes de inserção, exclusão e atualização realizadas em documentos, então os índices precisariam mudar isso com frequência, o que seria apenas uma sobrecarga para a coleção.
O exemplo abaixo mostra um exemplo de quais valores de campo poderiam constituir um índice em uma coleção. Um índice pode ser baseado em apenas um campo da coleção, ou pode ser baseado em múltiplos campos da coleção.
No exemplo abaixo, o Employeeid “1” e o EmployeeCode “AA” são usados para indexar os documentos da coleção. Assim, quando uma pesquisa é feita, estes índices serão usados para encontrar rápida e eficientemente os documentos necessários na coleção.
Então, mesmo que a pesquisa seja baseada no EmployeeCode “AA”, esse documento será devolvido.
Como criar índices: createIndex()
Criar um índice no MongoDB é feito usando o método “createIndex”.
O exemplo seguinte mostra como adicionar índice à coleção. Vamos assumir que temos nossa mesma coleção de Empregados que tem os nomes de Campo “Employeeid” e “EmployeeName”.
db.Employee.createIndex({Employeeid:1})
Código Explicação:
- O método createIndex é usado para criar um índice baseado no “Employeeid” do documento.
- O parâmetro ‘1’ indica que quando o índice é criado com os valores do Campo “Employeeid”, eles devem ser ordenados em ordem ascendente. Note que este é diferente do campo _id (O campo id é usado para identificar de forma única cada documento da coleção) que é criado automaticamente na coleção pelo MongoDB. Os documentos agora serão ordenados de acordo com o Employeeid e não com o campo _id.
Se o comando for executado com sucesso, o seguinte Output será mostrado:
Saída:
- O numIndexesBefore: 1 indica o número de valores de Campo (Os campos reais na coleção) que estavam lá nos índices antes do comando ser executado. Lembre-se que cada coleção tem o campo _id que também conta como um valor de Campo para o índice. Como o campo _id índice faz parte da coleção quando ele é inicialmente criado, o valor do numIndexesBefore é 1.
- O numIndexesDepois: 2 indica o número de valores de Campo que estavam nos índices após o comando ter sido executado.
- Aqui está o “ok: 1” especifica que a operação foi bem sucedida, e o novo índice é adicionado à coleção.
O código acima mostra como criar um índice baseado em um valor de campo, mas também se pode criar um índice baseado em múltiplos valores de campo.
O exemplo seguinte mostra como isto pode ser feito;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Explicação do código:
- O método createIndex agora leva em conta múltiplos valores de Campo que agora farão com que o índice seja criado com base no “Employeeid” e no “EmployeeName”. O Employeeid:1 e EmployeeName:1 indicam que o índice deve ser criado nestes 2 valores de campo com o :1 indicando que ele deve estar em ordem ascendente.
Como encontrar índices: getindexes()
Encontrar um índice no MongoDB é feito usando o método “getIndexes”.
O exemplo seguinte mostra como isto pode ser feito;
db.Employee.getIndexes()
Explicação do código:
- O método getIndexes é usado para encontrar todos os índices de uma coleção.
Se o comando for executado com sucesso, o seguinte Output será mostrado:
Saída:
- O output retorna um documento que apenas mostra que existem 2 índices na coleção que é o campo _id, e o outro é o campo Employee id. O :1 indica que os valores dos campos no índice são criados em ordem crescente.
Como Drop Indexes: dropindex()
Remover um índice no MongoDB é feito usando o método dropIndex.
O exemplo seguinte mostra como isto pode ser feito;
db.Employee.dropIndex(Employeeid:1)
Explicação do código:
- O método dropIndex toma os valores de Campo requeridos que precisam ser removidos do Índice.
Se o comando for executado com sucesso, será mostrado o seguinte Output:
Saída:
- O nIndexesWas: 3 indica o número de valores de Campo que existiam nos índices antes do comando ser executado. Lembre-se que cada coleção tem o campo _id que também conta como um valor de Campo para o índice.
- O ok: 1 output especifica que a operação foi bem sucedida, e o campo “Employeeid” é removido do index.
Para remover todos os índices de uma vez na coleção, pode-se usar o comando dropIndexes.
O exemplo seguinte mostra como isto pode ser feito.
db.Employee.dropIndex()
Explicação do código:
- >
- O método dropIndexes irá descartar todos os índices, exceto o índice _id.
Se o comando for executado com sucesso, será mostrado o seguinte Output:
Saída:
- O nIndexesWas: 2 indica o número de valores de Campo que existiam nos índices antes do comando ser executado.
- Recorde novamente que cada coleção tem o campo _id que também conta como um valor de Campo para o índice, e que não será removido pelo MongoDB e é isso que esta mensagem indica.
- O ok: 1 output especifica que a operação foi bem sucedida.
Resumo
- Definir índices é importante para uma pesquisa mais rápida e eficiente de documentos em uma coleção.
- Indexes podem ser criados usando o método createIndex. Índices podem ser criados em apenas um campo ou múltiplos valores de campo.
- Indexes podem ser encontrados usando o método getIndexes.
- Indexes podem ser removidos usando o método dropIndex para índices simples ou dropIndexes para dropIndexes para dropar todos os índices.