El índice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones, por medio de identificador único de cada fila de una tabla, permitiendo un rápido acceso a los registros de una tabla en una base de datos. Al aumentar drásticamente la velocidad de acceso, se suelen usar, sobre aquellos campos sobre los cuales se hacen frecuentes búsquedas.
El índice tiene un funcionamiento similar al índice de un libro, guardando parejas de elementos: el elemento que se desea indexar y su posición en la base de datos. Para buscar un elemento que esté indexado, sólo hay que buscar en el índice dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posición marcada por el índice.
Los índices pueden ser creados usando una o más columnas, proporcionando la base tanto para búsquedas rápidas al azar como de un ordenado acceso a registros eficiente.
Los índices son construidos sobre árboles B, B+, B* o sobre una mezcla de ellos, funciones de cálculo u otros métodos.
El espacio en disco requerido para almacenar el índice es típicamente menor que el espacio de almacenamiento de la tabla (puesto que los índices generalmente contienen solamente los campos clave de acuerdo con los que la tabla será ordenada, y excluyen el resto de los detalles de la tabla), lo que da la posibilidad de almacenar en memoria los índices de tablas que no cabrían en ella. En una base de datos relacional un índice es una copia de una parte de la tabla.
(Fuente Wikipedia)Cuando en nuestro log aparece algo como :
Oct 20 10:22:01 server slapd[16752]: <= bdb_equality_candidates: (memberUid) not indexed
quiere decir que se ha realizado una búsqueda por un campo el cual no esta indexado y ha sido consultado mediante equal (ya veremos más adelante que significa). De haber estado indexado, la búsqueda sería más rápida. Así pues, una vez creada nuestra base de datos deberíamos indexarla por aquellos campos que sabemos que van a ser consultados.
Creamos un archivo LDIF llamado, por ejemplo, olcDbIndex.ldif con este contenido (puedes variarlo según tus necesidades):
dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: cn pres,sub,eq - add: olcDbIndex olcDbIndex: sn pres,sub,eq - add: olcDbIndex olcDbIndex: uid pres,sub,eq - add: olcDbIndex olcDbIndex: displayName pres,sub,eq - add: olcDbIndex olcDbIndex: default sub - add: olcDbIndex olcDbIndex: uidNumber eq - add: olcDbIndex olcDbIndex: gidNumber eq - add: olcDbIndex olcDbIndex: mail,givenName eq,subinitial - add: olcDbIndex olcDbIndex: dc eqPara saber exactamente que significa pres, sub y eq sería conveniente saber estas definiciones:
- pres (presence) debe usarse si buscamos mediante un atributo especifico.
- approx (Approximate) se debe usar si buscamos por resultados que sean similares a nuestra busqueda "sn~=person". Es decir, que el resultado se aproxime.
- sub (substring) debe utilizar en las búsquedas del timpo “sn=sm*”. Es decir, con comodines.
- eq (equality) se debe usar en comparaciones directas. Es decir, en comparaciones de igualdad.
Una vez entendido y generado el archivo LDIF, ahora tenemos que inyectarlo en la base de datos mediante el comando ldapmodify :
ldapmodify -Y EXTERNAL -H ldapi:/// -f ./olcDbIndex.ldif
Importante crear siempre una copia de seguridad antes de manipular la base de datos.
ldapmodify -Y EXTERNAL -H ldapi:/// -f ./olcDbIndex.ldif
Importante crear siempre una copia de seguridad antes de manipular la base de datos.
No hay comentarios:
Publicar un comentario