Diccionario

Índice (base de datos)

Una estructura que la base de datos mantiene aparte para encontrar filas rápidamente sin recorrer toda la tabla.

Funciona como el índice alfabético de un libro: en lugar de leer todas las filas, la base de datos va directa a las que buscas.

A cambio, ocupa espacio y cada inserción o modificación tiene que actualizarlo. Se crean en las columnas que más se usan para buscar, ordenar o unir tablas.

Un ejemplo

Con un índice en pedidos.cliente_id, buscar los pedidos de un cliente entre millones tarda milisegundos.

Por qué importa

Un índice es una estructura auxiliar, normalmente un árbol B, que permite al gestor localizar filas sin recorrer toda la tabla. Funciona como el índice de un libro: en lugar de leer página a página para encontrar un tema, vas directo a la página indicada. En tablas pequeñas no se nota, pero con millones de filas, una consulta que tardaba segundos puede pasar a milisegundos.

Se crean con instrucciones como CREATE INDEX idx_email ON usuarios(email); y conviene ponerlos en las columnas que aparecen a menudo en WHERE, JOIN y ORDER BY. A cambio tienen un coste: ocupan espacio y hacen más lentas las escrituras, porque cada INSERT, UPDATE o DELETE debe actualizar también los índices. Por eso no se crean en todas las columnas, sino donde las consultas lo justifican.

Confusiones frecuentes

Se piensa que más índices siempre es mejor, y no: demasiados ralentizan las escrituras y consumen espacio. Otro error es creerse que el índice se usa siempre: el gestor decide si le conviene, y no lo usa, por ejemplo, si la consulta devuelve casi toda la tabla o si aplicas una función a la columna indexada en el WHERE. Tampoco hay que confundirlo con la clave primaria, aunque esta genera un índice automáticamente. Para ver si una consulta lo aprovecha, la mayoría de gestores ofrecen EXPLAIN.

Preguntas frecuentes

¿Cómo sé si una consulta usa un índice?

Con EXPLAIN delante de la consulta (en PostgreSQL y MySQL). Muestra el plan de ejecución e indica si recorre toda la tabla o usa un índice.

¿En qué columnas conviene crear índices?

En las que se usan mucho para filtrar, unir u ordenar, y que tienen muchos valores distintos. En columnas con muy pocos valores distintos, como un sí/no, aportan poco.