Fecha publicación: 12 jul 2021

MongoDb índices: Rangos

En el primer vídeo de esta serie, creamos un índice simple (asociado a un sólo campo), y vimos como en una consulta filtrando por dicho campo obteníamos una mejora considerable.

Después de este primer bautismo de fuego, seguro que te surgen muchas dudas: ¿Que pása si comparo por rango de valores en las consultas? ¿Y si tengo varios parámetros? ¿Qué pasa con la ordenación? Vamos a ir desgranando las respuestas en los siguientes videos.

Manos a la obra

Para asegurarnos que partimos limpios, vamos a borrar los índices que hayan asociados a la colección de movies

db.movies.dropIndexes();

Este comando elimina todos los índices asociados a dicha colección, menos el que crea Mongo por defecto, el que cubre el campo id

Hasta ahora hemos filtrado por un valor concreto del campo año, ¿y si queremos comparar por un rango? Por ejemplo queremos obtener las películas que se estrenaron a partir del año 2010, veamos que rendimiento tenemos sin índices. Procedemos a lanzar esta consulta desde el tab Explain Plan de Mongo Compass:

db.movies.find({ year: { $gte: 2010 } });

¿Que resultados obtenemos? Pues que al no tener índices definidos, tiramos de colscan y toca iterar por todos los documentos para poder obtener el resultado de la query.

Resumen

Consulta de rango sin índices, colscan

Ahora vamos a añadir el índice por el campo año

db.movies.createIndex({ year: 1 });

Y volvemos a lanzar la consulta

En este caso, podemos ver como se está haciendo uso del índice, y sólo recorremos los documentos afectados por la consulta.

gteindex.png

Resultado óptimo consulta de rango aplicando indices

Cómo puedes ver los índices nos sirven de ayuda también cuando tenemos definido un filtrado por rango de valores.

¿Con ganas de aprender Backend?

En Lemoncode impartimos un Bootcamp Backend Online, centrado en stack node y stack .net, en él encontrarás todos los recursos necesarios: clases de los mejores profesionales del sector, tutorías en cuanto las necesites y ejercicios para desarrollar lo aprendido en los distintos módulos. Si quieres saber más puedes pinchar aquí para más información sobre este Bootcamp Backend.