Entendendo Indexação no MongoDB

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)

executionTimeMillis dir-lhe-á o tempo de execução

Downsides of Index

Indexes não são livres, Índices de custo de espaço. Os índices podem aumentar a velocidade de leitura, mas sempre que algo é escrito, o índice precisa ser atualizado para resolver isso usamos a árvore B. Fazemos alguns cálculos antes da inserção, para que seja mais rápido.

Árvore B

Os índices não são uma Tabela de grupos, conceitualmente é na verdade uma Árvore B (Árvore binária) e não apenas MongoDB, o banco de dados SQL também usa a Árvore B para indexação

este Vídeo explica melhor a Árvore B

Deixe uma resposta

O seu endereço de email não será publicado.