miércoles, 17 de julio de 2013

Trabajando con Indices en MongoDB (1 Parte)

En cualquier sistema de base de datos, SQL o NoSQL, es muy importante el uso de índices para procesar búsquedas(querys) de forma rápida y eficiente. En MongoDB cuando creamos una colección, ésta crea por defecto un indice en el campo _id permitiéndonos crear un índice en cualquier campo de un documento.

La forma de crear un indice es la siguiente:
db.coleccion.ensureIndex( { "campo": 1 } ) 
EnsureIndex() únicamente crea el índice si este no existe, usaremos un 1 si queremos que la ordenación sea ascendente y -1 si es descendente.

Crear un índice provoca un bloqueo en la colección, por lo que si creamos un índice en una colección con gran cantidad de documentos podemos dejarla bloqueada con el riesgo de si estamos usando algún aplicativo en producción que use esta colección podría producir errores. La forma que tenemos para solucionar esto es crear el indice en Background.
db.coleccion.ensureIndex( { "campo": 1 }, { background: true } ) 
Por defecto MongoDB establece la opción de Background a false.

Para crear un nombre a nuestro índice lo haremos de la siguiente forma:
 db.coleccion.ensureIndex( { "campo": 1 } , {name: "MiIndice"} ) 
Si deseamos crear un índice sobre un campo de valores únicos, debemos tener en cuenta si dicho campo contiene valores repetidos, si es así podemos usar la opción dropDups : true esto hará eliminar dichos valores de la base de datos, por lo que hay que ser consciente de lo que se esta realizando.
 db.coleccion.ensureIndex( { "campo": 1 }, { unique: true, dropDups: true } ) 
Para consultar los índices que tenemos creados en una colección usaremos el siguiente comando:
 db.coleccion.getIndexes() 
En el siguiente capitulo veremos más opciones de como crear índices y el procedimiento de como crear índices en Replica sets.

2 comentarios:

  1. Buena aportación. Si no tienes inconveniente la ligamos en nuestra comunidad DBmx:

    https://plus.google.com/b/111591248149926991990/111591248149926991990/posts/Q73TAwgDKV6

    ResponderEliminar
    Respuestas
    1. Sin ningún problema, me alegro que te guste.
      Un saludo.

      Eliminar