Los índices son muy importantes en cualquier base de datos, y con MongoDB no es diferente. Con el uso de índices, la realización de consultas en MongoDB se vuelve más eficiente.
Si tuviéramos una colección con miles de documentos sin índices, y luego hiciéramos una consulta para encontrar ciertos documentos, entonces en ese caso MongoDB necesitaría escanear toda la colección para encontrar los documentos. Pero si tuvieras índices, MongoDB utilizaría estos índices para limitar el número de documentos que tuvieran que ser buscados en la colección.
Los índices son conjuntos de datos especiales que almacenan una parte de los datos de la colección. Como los datos son parciales, resulta más fácil leer estos datos. Este conjunto parcial almacena el valor de un campo específico o un conjunto de campos ordenados por el valor del campo.
En este tutorial, aprenderás –
- Entender el impacto de los índices
- Cómo crear índices: createIndex()
- Cómo encontrar índices: getindexes()
- Cómo eliminar índices: dropindex()
Entendiendo el impacto de los índices
Ahora bien, aunque desde la introducción hemos visto que los índices son buenos para las consultas, pero tener demasiados índices puede ralentizar otras operaciones como la de Insert, Delete y Update.
Si son frecuentes las operaciones de inserción, borrado y actualización de documentos, entonces los índices tendrían que cambiar tan a menudo, lo que sólo sería una sobrecarga para la colección.
El siguiente ejemplo muestra un ejemplo de qué valores de campo podrían constituir un índice en una colección. Un índice puede basarse en un solo campo de la colección, o puede basarse en múltiples campos de la colección.
En el ejemplo siguiente, el Employeeid «1» y el EmployeeCode «AA» se utilizan para indexar los documentos de la colección. Así, cuando se realiza una búsqueda de consulta, estos índices se utilizarán para encontrar rápida y eficazmente los documentos requeridos en la colección.
Así que incluso si la consulta de búsqueda se basa en el EmployeeCode «AA», ese documento sería devuelto.
Cómo crear índices: createIndex()
La creación de un índice en MongoDB se realiza mediante el método «createIndex».
El siguiente ejemplo muestra cómo añadir un índice a la colección. Supongamos que tenemos nuestra misma colección Employee que tiene los nombres de campo «Employeeid» y «EmployeeName».
db.Employee.createIndex({Employeeid:1})
Explicación del código:
- El método createIndex se utiliza para crear un índice basado en el «Employeeid» del documento.
- El parámetro ‘1’ indica que cuando se crea el índice con los valores del Campo «Employeeid», deben ordenarse de forma ascendente. Tenga en cuenta que esto es diferente del campo _id (El campo id se utiliza para identificar de forma única cada documento en la colección) que se crea automáticamente en la colección por MongoDB. Los documentos se ordenarán ahora según el campo Employeeid y no según el campo _id.
Si el comando se ejecuta con éxito, se mostrará la siguiente salida:
Salida:
- El numIndexesBefore: 1 indica el número de valores de Campo (Los campos reales de la colección) que había en los índices antes de ejecutar el comando. Recuerde que cada colección tiene el campo _id que también cuenta como un valor de Campo para el índice. Dado que el campo de índice _id es parte de la colección cuando se crea inicialmente, el valor de numIndexesBefore es 1.
- El numIndexesAfter: 2 indica el número de valores de Campo que había en los índices después de la ejecución del comando.
- Aquí el «ok: 1» especifica que la operación fue exitosa, y el nuevo índice se añade a la colección.
El código anterior muestra cómo crear un índice basado en un valor de campo, pero también se puede crear un índice basado en múltiples valores de campo.
El siguiente ejemplo muestra cómo se puede hacer esto;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Explicación del código:
- El método createIndex ahora tiene en cuenta múltiples valores de Campo que ahora hará que el índice se cree basado en el «Employeeid» y «EmployeeName». El Employeeid:1 y EmployeeName:1 indica que el índice debe ser creado en estos 2 valores de campo con el :1 indicando que debe ser en orden ascendente.
Cómo encontrar índices: getindexes()
La búsqueda de un índice en MongoDB se realiza mediante el método «getIndexes».
El siguiente ejemplo muestra cómo se puede hacer;
db.Employee.getIndexes()
Explicación del código:
- El método getIndexes se utiliza para encontrar todos los índices de una colección.
Si el comando se ejecuta con éxito, se mostrará la siguiente Salida:
Salida:
- La salida devuelve un documento que sólo muestra que hay 2 índices en la colección que es el campo _id, y el otro es el campo Id del empleado. El :1 indica que los valores de los campos en el índice se crean en orden ascendente.
Cómo eliminar índices: dropindex()
La eliminación de un índice en MongoDB se realiza mediante el método dropIndex.
El siguiente ejemplo muestra cómo se puede hacer;
db.Employee.dropIndex(Employeeid:1)
Explicación del código:
- El método dropIndex toma los valores del Campo requerido que necesita ser eliminado del Índice.
Si el comando se ejecuta con éxito, se mostrará la siguiente Salida:
Salida:
- El nIndexesWas: 3 indica el número de valores de Campo que había en los índices antes de ejecutar el comando. Recuerde que cada colección tiene el campo _id que también cuenta como un valor de Campo al índice.
- El ok: 1 especifica que la operación fue exitosa, y el campo «Employeeid» se elimina del índice.
Para eliminar todos los índices a la vez en la colección, se puede utilizar el comando dropIndexes.
El siguiente ejemplo muestra cómo se puede hacer esto.
db.Employee.dropIndex()
Explicación del código:
- El método dropIndexes eliminará todos los índices excepto el índice _id.
Si el comando se ejecuta con éxito, se mostrará la siguiente Salida:
Salida:
- El nIndexesWas: 2 indica el número de valores de Campo que había en los índices antes de ejecutar el comando.
- Recuerda de nuevo que cada colección tiene el campo _id que también cuenta como un valor Field para el índice, y que no será eliminado por MongoDB y eso es lo que indica este mensaje.
- El ok: 1 de salida especifica que la operación fue exitosa.
Summary
- La definición de índices es importante para una búsqueda más rápida y eficiente de los documentos de una colección.
- Los índices se pueden crear utilizando el método createIndex. Los índices pueden ser creados en un solo campo o múltiples valores de campo.
- Los índices pueden ser encontrados utilizando el método getIndexes.
- Los índices pueden ser eliminados utilizando el dropIndex para índices individuales o dropIndexes para eliminar todos los índices.
.