🏠 Inicio

Índices: El Secreto del Rendimiento

Cómo hacer que tus consultas vuelen

La Analogía Perfecta: El Índice de un Libro

Imagina que buscas un capítulo específico en un libro de 500 páginas.

  • Sin índice: Tendrías que leer página por página desde el principio hasta encontrar lo que buscas. Esto es un Full Table Scan en una base de datos.
  • Con índice: Vas al índice al final del libro, buscas el capítulo, ves el número de página y vas directamente a ella. Esto es un Index Seek.

Un índice es una estructura de datos que permite a la base de datos encontrar filas de forma extremadamente rápida.

¿Cómo Funciona un Índice? La Estructura B-Tree

La mayoría de los índices en bases de datos relacionales usan una estructura de datos llamada B-Tree (Árbol B).

  • Es una estructura de árbol auto-balanceada que mantiene los datos ordenados.
  • Permite búsquedas, inserciones y eliminaciones en tiempo logarítmico (muy rápido).
  • La base de datos navega el árbol desde la raíz hasta las hojas para encontrar la ubicación exacta de la fila en el disco.

Tipos de Índices: Clustered vs. Non-Clustered

Índice Agrupado (Clustered)

El índice ES la tabla. Los datos de la tabla están físicamente ordenados en el disco según la columna del índice.

  • Solo puede haber uno por tabla.
  • Generalmente se crea en la Llave Primaria.
  • Extremadamente rápido para búsquedas por rango.

Índice No Agrupado (Non-Clustered)

Es una estructura separada de la tabla. Contiene la columna del índice y un puntero a la fila de datos real.

  • Puede haber muchos por tabla.
  • La tabla (heap) no tiene un orden físico.
  • Requiere un paso extra (buscar en el índice y luego ir a la tabla).

El Costo Oculto de los Índices

Los índices son fantásticos para las lecturas (`SELECT`), pero tienen un costo en las operaciones de escritura.

  • `INSERT` / `UPDATE` / `DELETE`: Cada vez que modificas una fila, la base de datos no solo debe modificar la tabla, sino también actualizar cada índice afectado para mantenerlo ordenado.
  • Espacio en Disco: Cada índice es una estructura de datos adicional que ocupa espacio.

Conclusión: No se deben crear índices a la ligera. Hay que tener una estrategia.

Estrategia: ¿Cuándo Crear un Índice?

  • 1️⃣

    Columnas en la Cláusula `WHERE`

    Es el caso de uso más importante. Indexa las columnas que usas frecuentemente para filtrar datos.

  • 2️⃣

    Columnas en `JOIN`s

    Las llaves foráneas son candidatas perfectas para un índice. Acelera drásticamente la unión de tablas.

  • 3️⃣

    Columnas en `ORDER BY`

    Si ordenas frecuentemente por una columna, un índice puede evitar una costosa operación de ordenamiento en memoria.

  • ⚠️

    Cuidado con...

    Columnas de baja cardinalidad (pocos valores únicos, como 'Género') o tablas muy pequeñas.