Introducción
En Q3 de 2023 hemos incorporado la creación de índices en MongoDB.
El objetivo de este post es familiarizarse con creación de Índex en MongoDB y sus distintas opciones.
La creación de índices en MongoDB es una parte fundamental del diseño de bases de datos y optimización de consultas. Los índices mejoran la eficiencia de las consultas al permitir que MongoDB acceda rápidamente a los documentos que coinciden con ciertos criterios de búsqueda sin tener que escanear toda la colección.
¿Qué es un índice en MongoDB?
En MongoDB, un índice es una estructura de datos que almacena un subconjunto de los datos de una colección en un formato que permite una búsqueda rápida y eficiente. Los índices se basan en uno o varios campos de los documentos de una colección y se utilizan para acelerar las consultas que involucran esos campos.
Tipos de índices en MongoDB.
En MongoDB, existen varios tipos de índices que se pueden crear según las necesidades específicas de tu aplicación. Los dos tipos principales de creación de índices son los índices simples y los índices múltiples o compuestos.
Índice Simple
Un índice simple se configura con una única propiedad. Puede ser ascendente o descendente, lo que determina la manera en que se organizan los valores dentro del índice. Estos índices son valiosos cuando buscas optimizar la búsqueda o clasificación de documentos basándote en una sola característica. Un caso práctico sería la creación de un índice simple en el campo "name" para agilizar la búsqueda de documentos según sus nombres.
Índice Múltiple o Compuesto
Un índice compuesto se crea en múltiples campos de un documento. Puedes especificar el orden (ascendente o descendente) para cada campo en el índice compuesto, también muestra el orden de la inserción de las propiedades al crear el índice, ya que influye y puede tener un impacto significativo en el rendimiento de las consultas y la eficiencia de las operaciones de búsqueda. Esto es útil cuando deseas acelerar consultas que involucran varios campos en combinación. Por ejemplo, si deseas buscar documentos por "name" y "id", puedes crear un índice compuesto en ambos campos.
Opciones al crear un índice Simple o Compuesto.
Las opciones que tenemos para crear un índice son las siguientes:
Background: Si marcamos el check, MongoDB creará el índice en segundo plano, lo que significa que no bloqueará la escritura en la colección mientras se crea el índice. Es útil para colecciones con una gran cantidad de datos o documentos.
TTL (Time-To-Live): Puedes establecer un índice con esta opción para habilitar la expiración automática de documentos después de un período de tiempo especificado. Esto es útil para datos que deben ser eliminados automáticamente después de un cierto tiempo, al marcar el check de TTL, automáticamente aparecerá debajo un campo para introducir el tiempo en segundos. (Esta opción solo puede utilizarse en índices Simples)
Unique: Si marcamos el check, MongoDB garantizará que no haya duplicados en los campos indexados. Es decir, no se permitirá más de un documento con el mismo valor para los campos indexados. Esto es útil cuando necesitas garantizar la unicidad de los datos.
Sparse: Si marcamos el check, el índice solo incluirá documentos que contengan el campo indexado. Esto es útil cuando no todos los documentos de la colección tienen el campo que deseas indexar.
Creación de índices en MongoDB.
La creación de índices en MongoDB se ha introducido al editar la ontología, como se puede observar en “Índex Configuration”:
Al acceder a la pantalla podemos observar el listado de índices creados, y debajo las opciones para la creación de índices, en las cuales podemos introducir el nombre que queremos poner a nuestro índice, el tipo (Simple o Múltiple) y sus distintas opciones:
En índex simple (Unique, Sparse , Background y TTL)
En índex múltiple (Unique, Sparse , Background)
Creación índice Simple
Para crear un índice simple, el primer paso implica asignarle un nombre al índice que deseamos crear. Por defecto, se establece que el tipo de índice es simple. Luego, seleccionamos las opciones que deseamos configurar para nuestro índice y elegimos la propiedad que servirá como base para la creación del mismo. Es importante tener en cuenta que no es posible crear índices únicos utilizando propiedades de tipo "Object" o "Array", ya que estas opciones aparecen deshabilitadas. Finalmente, concluimos el proceso haciendo clic en la opción "Crear índice".
Ejemplo de creación de índice simple con opciones:
Ejemplo de creación de incide simple sin opciones, descendente;
Ejemplo de creación de índice con Background y Unique;
Podemos ver como aparece en el listado de la parte superior, especificando las opciones añadidas.
Creación índice Múltiples o Compuestos
Para crear un índice compuesto, el proceso inicia al asignar un nombre al índice compuesto que deseamos crear. Luego, modificamos el tipo de índice de "simple" a "múltiple". A continuación, seleccionamos las opciones que deseamos configurar para nuestro índice y especificamos las propiedades que servirán como base para la creación del índice compuesto. Es posible observar el orden en que estas propiedades están dispuestas al crear el índice en la columna "Field Order". Importante recordar que no es viable crear índices compuestos utilizando propiedades de tipo "Object" o "Array", ya que estas opciones aparecen deshabilitadas. Para finalizar, confirmamos la creación del índice compuesto.
Ejemplo de índice compuesto con opciones, con “name” ascendente y los demás descendentes:
Ejemplo de índice compuesto sin opciones;
Ejemplo de índice compuesto con Sparse y todos con ordenación descendentes:
Podemos ver como aparece en el listado de la parte superior, especificando las opciones añadidas, junto a todos los índices creados:
Eliminación de índices
Para eliminar el índice creado o existente, podemos hacer al editar la entidad
A continuación, pinchamos en “Índex Configuration” y eliminamos un índice simple y otro índice compuesto:
Al eliminarlos podemos ver como se eliminan del listado.
Visualización de índices creados
Al crear los índices, se pueden visualizar desde tres sitios, desde la parte de edición de la entidad en la cual se puede crear y eliminar, la parte de visualizar la entidad en la cual solo se puede visualizar los índices y desde el Query Tool, en el cual podemos crear, elimina y visualizar.
Visualización de Entidad
Solo podemos observar el listado de índices
Edición de Entidad
Podemos observar el listado de índices, eliminar y crear
Query Tool
Ejecutando la sentencia de getIndex(); podemos obtener los índices:
Con la ejecución de dropIndex(), eliminamos el indice
Podemos observar cómo se ha eliminado:
Con createIndex() podemos crear el índice:
Podemos observar cómo se ha creado: