Qué es un índice de base de datos
Imagina que buscas una palabra en un libro grueso. Leer desde la primera página hasta la última llevaría demasiado tiempo. Por eso los libros tienen un índice al final: cada palabra aparece con un número de página, así que puedes ir directo a esa página. Con una base de datos pasa lo mismo. Cuando hay muchos datos, recorrerlo todo desde el principio es demasiado lento, así que se prepara de antemano una lista de consulta llamada índice.
Los libros tienen un índice al final
En las lecciones anteriores vimos cómo una base de datos encuentra la fila que busca, y cómo el hash y los árboles equilibrados encuentran las cosas rápido. Ahora toca ver cómo se usan esas herramientas dentro de una base de datos.
Cuando hay muchísimos datos, recorrerlos de principio a fin es lento, igual que buscar una palabra en un libro grueso desde la primera página. Por eso los libros tienen al final un índice con el número de página junto a cada palabra.
Toca recorrer el texto desde el principio y saltar con el índice para compararlos. Cuenta cuántos pasos necesita cada uno.
Saltando con el índice, encontraste la palabra en muchos menos pasos. El índice de una base de datos es justamente esta clase de lista de consulta: se elige una columna de una tabla y se anota de antemano cada valor junto con la posición de su fila.
Pero hay distintos tipos de índice, porque encontrar un valor exacto y encontrar un rango piden métodos diferentes.
Un índice hash para valores exactos
A veces quieres encontrar un valor exacto, como "Kim Chulsoo". En ese caso, un índice hash va muy bien.
El hash que vimos antes recibe el nombre y calcula al instante el número de casilla, así que, en lugar de recorrer fila tras fila, saltas a esa casilla de una vez. Es como recordar el número de tu casillero y abrir esa casilla directamente.
Toca un nombre: el hash calcula el número de su casilla y salta allí de una vez.
Un solo nombre te llevó directo a su casilla. Un índice hash es muy rápido para encontrar un valor exacto así.
Pero tiene un punto débil. Como el hash reparte los valores sin relación con su tamaño, no puede buscar por rangos, como "de 20 a 30 años". Para eso hace falta otro índice.
Un índice de árbol para rangos
A veces quieres buscar por rangos, como "de 20 a 30 años". En ese caso, un índice de árbol va muy bien. Se construye con un árbol equilibrado como el de la lección anterior, así que mantiene los valores ordenados de menor a mayor.
Una vez que encuentras el valor inicial, puedes seguir de largo desde ahí y recorrer en orden los valores del rango, igual que en un diccionario ordenado alfabéticamente. De hecho, la mayoría de las bases de datos usan este índice de árbol por defecto.
Toca para fijar el rango que buscas. El índice de árbol ordenado encuentra el valor inicial y recorre el rango.
Como los valores están ordenados, el rango siguió de largo, uno al lado de otro. El hash da justo en un punto, mientras que el árbol recorre una línea.
Así que el índice adecuado depende de lo que más busques: hash si buscas mucho valores exactos, árbol si buscas mucho por rangos. Pero un índice no es gratis.
Un índice no es gratis
Un índice no solo trae ventajas. Primero, ocupa espacio extra: como la lista de consulta se anota aparte, necesita ese tanto más de almacenamiento.
Segundo, cuando cambian los datos, el índice también hay que actualizarlo. Cada vez que se añade o se borra una fila, la lista de consulta también se tiene que corregir, así que escribir se vuelve más lento en esa medida. Por eso crear índices sin pensar puede salir más caro que no tenerlos.
Añade o borra una fila. Cada vez que cambian los datos, el índice se actualiza con ellos y el espacio que usa crece.
Cada vez que cambiaste los datos, el índice se movió con ellos y ocupó cada vez más espacio. Por eso los índices se crean solo en las columnas que se buscan a menudo.
Se pesa en una balanza la ventaja de la rapidez frente al costo del espacio y de mantener el índice al día. Si eliges bien, buscar se vuelve mucho más rápido.
En resumen
En pocas palabras: un índice es una lista de consulta, como el índice de un libro, que te permite saltar directo al lugar que buscas. Un índice hash da en un solo paso con un valor exacto, y un índice de árbol, como está ordenado, va muy bien para recorrer un rango.
Pero los índices ocupan espacio extra y hay que actualizarlos cada vez que cambian los datos. Por eso se crean solo en las columnas que se buscan a menudo.
Toca en orden los puntos clave para repasar. (el índice de un libro → hash para valores exactos → árbol para rangos → no es gratis)
Ahora ya sabes cómo un índice hace que buscar sea rápido. Hasta aquí hemos manejado datos alineados en las filas de una tabla.
Pero a veces lo que más importa son las conexiones entre los datos, como las amistades o las líneas del metro. La próxima lección presenta los datos guardados como puntos unidos por líneas: el grafo.