TLDR: Indexação é apenas uma forma de agrupar documentos, dividindo coleções em grupos para acelerar o desempenho
Visão geral
Indexes aumentam o desempenho da consulta, bem como é usado para pesquisas
A idéia de indexação no MongoDB é semelhante à indexação de qualquer livro, Eles aumentam a velocidade de encontrar uma página. O índice no MongoDB aumenta a velocidade de encontrar documentos
Como funcionam os índices?
Primeiro, vamos entender como você declara índice no MongoDB
collectionName.createIndex({field:value}) //for creating indexcollectionName.dropIndex({field:value}) //for removing index
O campo aqui é o “fieldName” que será indexado. O “Value” pode ser -1 ou 1 ou “text”.
Define o tipo de índice, 1 ou -1 aumenta o desempenho da consulta find() enquanto que “text” é usado para pesquisar.
1 e -1 dá a ordem do índice. Ascendente = -1 & Descendente =1
Agora, Como funcionam os índices sob a capa?
Imagine uma coleção de usuários, cada documento contendo várias informações, sendo uma delas a pontuação.
Vamos dizer que queremos que todos os usuários tenham pontuação 23.
Quando não existe nenhum índice, MongoDB percorre cada documento para encontrar o documento consultado, Isto chama-se Collection scan, MongoDB tem um shorthand para este COLLSCAN (Isto chama-se Table scan in Relational databases)
Como podemos optimizar isto?
Para optimizar isto podemos criar uma tabela com uma coluna para pontuação e outra coluna para referências que conterá IDs de documentos com essa pontuação em particular. Agora só precisamos de digitalizar essa tabela em vez de digitalizar toda a base de dados. Isto é muito mais rápido. Isto é exactamente o que é um Índice.
Indexes ajudam o MongoDB a restringir o conjunto de dados que terá de digitalizar. Isto chama-se Index Scan, MongoDB tem uma abreviatura para isto também IXNSCAN
Aqui está uma representação visual de um score Index e o seu mapeamento.
A melhoria de desempenho por Index só é visível quando o número de documentos cruza cerca de 100K.
>
Você mesmo pode compará-lo comparando duas consultas, uma com um campo indexado e outra sem um Index
db.<collection name>.find(query).explain()
Um Objeto será retornado
objeto.winingPlan.stage dirá o tipo de scan COLLSCAN ou IXNSCAN
mas não dirá o tempo gasto na execução
use explain(‘executionStat’) método antes do método de consulta como find
db.<collection name>explain('executionStat').find(query)