Entendiendo la indexación en MongoDB

TLDR: La indexación es sólo una forma de agrupar documentos, dividiendo las colecciones en grupos para acelerar el rendimiento

Overview

Los índices aumentan el rendimiento de la consulta, así como se utiliza para las búsquedas

La idea de la indexación en MongoDB es similar al índice de cualquier libro, aumentan la velocidad de encontrar una página. El índice en MongoDB aumenta la velocidad de encontrar documentos

¿Cómo funcionan los índices?

Primero, vamos a entender cómo se declara el índice en MongoDB

collectionName.createIndex({field:value}) //for creating indexcollectionName.dropIndex({field:value}) //for removing index

Aquí el campo es el «fieldName» que será indexado. «Valor» puede ser -1 o 1 o «texto».

Define el tipo de índice, 1 o -1 aumentan el rendimiento de la consulta find() mientras que «texto» se utiliza para la búsqueda.

1 y -1 dan el orden del índice. Ascendente = -1 & Descendente =1

Ahora, ¿cómo funcionan los índices bajo el capó?

Imagina una colección de usuarios, cada documento contiene varias informaciones, una de ellas es la puntuación.

Digamos que queremos que todos los usuarios tengan una puntuación de 23.

Cuando no existe un índice, MongoDB recorre cada documento para encontrar el documento consultado, esto se llama escaneo de la colección, MongoDB tiene una abreviatura para este COLLSCAN (Esto se llama escaneo de la tabla en las bases de datos relacionales)

¿Cómo podemos optimizar esto?

Para optimizar esto podemos crear una tabla con una columna para la puntuación y otra columna para las referencias que contendrá los ID de los documentos con esa puntuación en particular. Ahora sólo tenemos que escanear esa tabla en lugar de escanear toda la base de datos. Esto es mucho más rápido. Esto es exactamente lo que es un índice.

Los índices ayudan a MongoDB a reducir el conjunto de datos que tendrá que escanear. Esto se llama Index Scan, MongoDB tiene una abreviatura para esto también IXNSCAN

Aquí está una representación visual de un índice de puntuación y su mapeo.

La mejora del rendimiento por el índice sólo es visible cuando el número de documentos cruza 100K o así.

Puede compararlo usted mismo comparando dos consultas una con un campo indexado y otra sin índice

db.<collection name>.find(query).explain()

Se devolverá un objeto

objeto.winingPlan.stage le dirá el tipo de escaneo COLLSCAN o IXNSCAN

pero no le dirá el tiempo empleado en la ejecución

utilice el método explain(‘executionStat’) antes del método de consulta como find

db.<collection name>explain('executionStat').find(query)

executionTimeMillis te dirá el tiempo de ejecución

Desventajas de los índices

Los índices no son gratuitos, Los índices cuestan espacio. Los índices pueden aumentar la velocidad de lectura pero cada vez que se escribe algo, el índice necesita ser actualizado para resolver esto usamos el árbol B hacemos algunos cálculos antes de la inserción para que sea más rápido.

Árbol B

Los índices no son una Tabla de grupos, conceptualmente es en realidad un Árbol B (Árbol Binario) no sólo MongoDB, la base de datos SQL también utiliza el Árbol B para indexar

este Video explica mejor el Árbol B

Deja una respuesta

Tu dirección de correo electrónico no será publicada.