Cómo mejorar las consultas con la indexación de MongoDB

Como Mejorar Las Consultas Con La Indexacion De Mongodb



Mejorar la velocidad de las consultas es esencial para MongoDB y todos los demás sistemas de bases de datos. Al crear estructuras de datos que ayudan a MongoDB a identificar registros más rápidamente, la indexación es un enfoque potente para acelerar y optimizar las búsquedas. Los índices incluyen copias de algunos de los datos de los registros para que las consultas sean más efectivas. Esto agiliza el esfuerzo involucrado en responder a las solicitudes en MongoDB. En esta guía, analizaremos el uso de índices con la ayuda de diferentes tipos de indexación.

Crear colección

Antes de usar índices, debemos crear una nueva colección en nuestro MongoDB. Ya hemos creado uno e insertado 10 documentos, llamado 'Dummy'. La función find() MongoDB muestra todos los registros de la colección 'Dummy' en la pantalla del shell de MongoDB a continuación.

prueba> db.Dummy.find()







Elija el tipo de indexación

Antes de establecer un índice, primero debe determinar las columnas que se utilizarán comúnmente en los criterios de consulta. Los índices funcionan bien en columnas que se filtran, ordenan o buscan con frecuencia. Los campos con una cardinalidad grande (muchos valores diferentes) suelen ser excelentes opciones de indexación. A continuación se muestran algunos ejemplos de código para diferentes tipos de índice.



Ejemplo 01: Índice de campo único

Probablemente sea el tipo de índice más fundamental, que indexa una sola columna para mejorar la velocidad de consulta en esa columna. Este tipo de índice se utiliza para consultas en las que se utiliza un único campo clave para consultar los registros de la colección. Supongamos que utiliza el campo 'tipo' para consultar los registros de la colección 'Dummy' dentro de la función de búsqueda como se muestra a continuación. Este comando revisaría toda la colección, lo que podría llevar mucho tiempo para que se procesen colecciones grandes. Por lo tanto, necesitamos optimizar el rendimiento de esta consulta.



prueba> db.Dummy.find({tipo: 'emp' })





Los registros de la colección ficticia anterior se encontraron utilizando el campo 'tipo', es decir, que contienen una condición. Por lo tanto, aquí se puede utilizar el índice de clave única para optimizar la consulta de búsqueda. Entonces, emplearemos la función createIndex() de MongoDB para crear un índice en el campo 'tipo' de la colección 'Dummy'. La ilustración del uso de esta consulta muestra la creación exitosa de un índice de clave única llamado 'tipo_1' en el shell.

prueba> db.Dummy.createIndex({ tipo: 1 })

Usemos la consulta find() una vez que gane utilizando el campo 'tipo'. La operación será significativamente más rápida ahora que la función find() utilizada anteriormente, ya que el índice está implementado porque MongoDB puede utilizar el índice para recuperar rápidamente los registros con el título del trabajo solicitado.



prueba> db.Dummy.find({tipo: 'emp' })

Ejemplo 02: Índice compuesto

Es posible que queramos buscar elementos según varios criterios en determinadas circunstancias. La implementación de un índice compuesto para estos campos puede ayudar a mejorar el rendimiento de las consultas. Digamos que esta vez desea buscar en la colección 'Ficticia' utilizando múltiples campos que contienen diferentes condiciones de búsqueda a medida que se muestra la consulta. Esta consulta ha estado buscando registros de la colección donde el campo 'tipo' está establecido en 'emp' y el campo 'sal' es mayor que 350.

Se ha utilizado el operador lógico $gte para aplicar la condición al campo “sal”. Se obtuvo un total de dos registros después de buscar en toda la colección, que consta de 10 registros.

prueba> db.Dummy.find({tipo: 'emp' , sal: {$gte: 350 } })

Creemos un índice compuesto para la consulta antes mencionada. Este índice compuesto tiene campos 'tipo' y 'sal'. Los números '1' y '-1' representan el orden ascendente y descendente, respectivamente, para los campos 'tipo' y 'sal'. La secuencia de las columnas del índice compuesto es importante y debe corresponder a los patrones de consulta. MongoDB le ha dado el nombre 'type_1_sal_-1' a este índice compuesto como se muestra.

prueba> db.Dummy.createIndex({ tipo: 1 , voluntad:- 1 })

Después de usar la misma consulta find() para buscar registros con el valor del campo “tipo” como “emp” y el valor del campo “sal” mayor que igual a 350, hemos obtenido el mismo resultado con un ligero cambio en el orden. en comparación con el resultado de la consulta anterior. El registro de valor más grande para el campo 'sal' ahora ocupa el primer lugar, mientras que el más pequeño está en el más bajo según el '-1' establecido para el campo 'sal' en el índice compuesto anterior.

prueba> db.Dummy.find({tipo: 'emp' , sal: {$gte: 350 } })

Ejemplo 03: índice de texto

A veces, puede encontrarse con una situación en la que deba trabajar con un gran conjunto de datos, como grandes descripciones de productos, ingredientes, etc. Un índice de texto puede ser útil para realizar búsquedas de texto completo en un campo de texto grande. Por ejemplo, hemos creado una nueva colección llamada 'Prueba' dentro de nuestra base de datos de prueba. Se insertó un total de 6 registros en esta colección usando la función insertMany() según la consulta find() a continuación.

prueba> db.Test.insertMany([

{nombre: 'ana' , desde: 'Vive en Londres y es buena profesora' },

{nombre: 'roberto' , desde: 'Es un jugador de fútbol increíble' },

{nombre: 'de' , desde: 'Podría estar viajando por Dubai' },

{nombre: 'Jacob' , desde: 'Es alucinante y rico'. },

{nombre: 'Cillian' , desde: 'Una película con un gran comienzo se hizo famosa en cuestión de segundos' },

{nombre: 'Conocido' , desde: 'Amante de la comida. Ella también puede comerte'. }

])

Ahora, crearemos un índice de texto en el campo 'Des' de esta colección, empleando la función createIndex() de MongoDB. La palabra clave 'texto' en el valor del campo muestra el tipo de índice, que es un índice de 'texto'. El nombre del índice, des_text, se ha generado automáticamente.

prueba> db.Test.createIndex({ des: 'texto' })

Ahora, la función find() se ha utilizado para realizar la 'búsqueda de texto' en la colección a través del índice 'des_text'. El operador $search se utilizó para buscar la palabra “alimento” en los registros de la colección y mostrar ese registro en particular.

prueba> db.Test.find({ $texto: { $búsqueda: 'alimento' }});

Verificar índices:

Puede verificar y enumerar todos los índices aplicados de diferentes colecciones en su MongoDB. Para esto, use el método getIndexes() junto con el nombre de una colección en su pantalla de shell MongoDB. Hemos utilizado este comando por separado para las colecciones 'Prueba' y 'Dummy'. Esto muestra toda la información necesaria sobre los índices integrados y definidos por el usuario en su pantalla.

prueba> db.Test.getIndexes()

prueba> db.Dummy.getIndexes()

Índices de caída:

Es hora de eliminar los índices que se crearon previamente para la colección usando la función dropIndex() junto con el mismo nombre de campo al que se aplicó el índice. La siguiente consulta muestra que se ha eliminado el índice único.

prueba> db.Dummy.dropIndex({tipo: 1 })

De la misma manera, se puede eliminar el índice compuesto.

prueba> db.Dummy.drop index({tipo: 1 , voluntad: 1 })

Conclusión

Al acelerar la recuperación de datos de MongoDB, la indexación es esencial para mejorar la eficiencia de las consultas. Al carecer de índices, MongoDB debe buscar en toda la colección registros coincidentes, lo que se vuelve menos efectivo a medida que aumenta el tamaño del conjunto. La capacidad de MongoDB para descubrir rápidamente los registros correctos utilizando la estructura de la base de datos de índice acelera el procesamiento de consultas cuando se utiliza la indexación adecuada.