19-05-2009 David González
Los índices en las BBDD pretenden aligerar las consultas, a modo de simil podríamos verlos como un índice de libro. Buscar un capítulo en un libro sin un índice implicaría recorrer el libro entero hasta que nos topasemos con el mientras que encontrarlo con un índice supondría recorrer este último y luego ir directamente a la página en la que se encuentra lo que nos interesa.
Pros:
Las búsquedas recorren muchas menos tuplas.
Menos carga.
Mas velocidad.
Contras:
Evidentemente los índices tienen que generarse y posteriormente actualizarse con cada escritura, esto supone carga.
Los índices ocupan espacio, se que parece de perogrullo, pero cuando superan en tamaño a la BBDD tienes un problema.
Consejos:
Los índices son convenientes en campos con un amplio abanico de valores alojados, esto no quiere decir que para un campo binario no sean efectivos, pero siendo binario un índice solo nos ahorrará el 50% de las tuplas en cada consulta mientras que si hablamos de un campo “id” de valor único nos supone ahorrarnos el 99% de las tuplas.
Definir los índices sobre los campos que utilices en los “where” de tus consultas.
Pueden estar definidos sobre un solo campo de la BBDD o sobre varios (índice sobre el DNI o índice sobre DNI-edad-localidad), si los vas a definir sobre varios campos, estos índices solo se utilizarán si en el “where” de la consulta los especificas en dicho orden.
Para el índice DNI-edad-localidad los “where” que utilizarian dicho índice serian:
where dni=X
where dni=x and edad=y
where dni=x and edad=z and localidad=z
¿Como crear un índice en MySQL?
ALTER TABLE nombre-de-la-tabla ADD INDEX nombre-del-indice (columna/s-que-forma/n-el-indice)
En la vida real
Para muestra de la efectividad de los índices, adjunto una captura de la gráfica de carga de una máquina del curro antes y después de crear los índices sobre la BBDD.
Gracias a Rubén por lo que ha aportado mis conocimientos sobre índices
1. 13 de Septiembre » &hellip | Mayo 21st, 2009 at 1:58 pm
[...] Fuente: http://www.programania.net/programacion/databases/indices-en-bases-de-datos-primeros-pasos/ [...]
2. Programador Java | Mayo 23rd, 2009 at 5:14 am
Hola;
Muchas gracias por el artículo, como siempre, es muy interesante y revelador.
Una pregunta: ¿Cómo mediste la carga de la máquina?, ¿usaste alguna herramienta especial?.
Saludos
3. David González | Junio 5th, 2009 at 11:24 am
Las gráficas están sacadas de una herramienta que se llama Cacti (http://www.cacti.net/) sirve para monitorizar BBDD, red, carga…