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)