Índices en Bases de Datos: Por Qué Aceleran las Consultas y Cuándo Estorban

Un índice puede convertir una consulta lenta en instantánea, pero no siempre conviene. Aprende cómo funcionan y cuándo usarlos.

Compartir en Linkedin Compartir en WhatsApp

Tiempo estimado de lectura: 8 minutos

Imagen del artículo Índices en Bases de Datos: Por Qué Aceleran las Consultas y Cuándo Estorban

Tienes una tabla con un millón de registros y una consulta que tarda varios segundos. Añades un índice sobre la columna del filtro y de pronto responde al instante. Parece magia, pero es una idea sencilla que ya conocías antes de tocar una base de datos.

La analogía del libro

Imagina un manual de 800 páginas y la necesidad de encontrar todo lo que dice sobre “normalización”. Sin ayuda, tendrías que leer página por página hasta el final, porque el tema podría reaparecer en cualquier parte. Eso es lo que la base de datos llama un recorrido completo de tabla.

Ahora imagina que el libro tiene un índice alfabético al final. Buscas la palabra, encuentras “normalización: 145, 312, 588” y vas directo a esas tres páginas. Eso es un índice en el sentido de base de datos: una estructura auxiliar, ordenada, que apunta a la ubicación real de los datos.

La analogía también revela los costos. El índice ocupa páginas adicionales del libro, y si alguien reescribe un capítulo hay que actualizarlo. Exactamente lo mismo ocurre en una base de datos.

Cómo funciona por dentro

La mayoría de los motores relacionales —PostgreSQL, MySQL, SQL Server, Oracle— usan por defecto una estructura llamada árbol B (o su variante B+). No hace falta implementarla, pero entender su comportamiento explica casi todo lo demás.

La idea es que los valores se guardan ordenados en una estructura jerárquica de pocos niveles. Buscar un valor consiste en descender por el árbol descartando en cada paso la mayor parte de los candidatos, igual que al buscar una palabra en un diccionario: abres por la mitad, decides si vas hacia adelante o hacia atrás, y repites.

El efecto práctico es enorme. Duplicar el tamaño de la tabla apenas añade trabajo a una búsqueda por índice, mientras que el recorrido completo se duplica también. Por eso la diferencia se vuelve dramática justo cuando los datos crecen.

Como los valores quedan ordenados, el índice también sirve para rangos (BETWEEN, >, <) y para evitar ordenamientos costosos en un ORDER BY.

Qué columnas conviene indexar

No todas las columnas se benefician igual. Estas son las candidatas naturales:

  • Claves primarias. Prácticamente todos los motores las indexan automáticamente.
  • Claves foráneas. Son las columnas que usan los JOIN, y sin índice cada unión puede volverse muy costosa.
  • Columnas usadas en WHERE con frecuencia, sobre todo si filtran mucho.
  • Columnas de ORDER BY en consultas que se ejecutan a menudo.
  • Columnas con restricción de unicidad, como un correo electrónico o un documento de identidad.

El concepto de selectividad

Aquí está la idea que separa un índice útil de uno inútil. La selectividad mide cuántos valores distintos tiene una columna en relación con el total de filas.

ColumnaValores distintosSelectividad¿Índice útil?
documento_identidadCasi todos únicosMuy alta
correo_electronicoCasi todos únicosMuy alta
ciudadCientosMediaNormalmente sí
estado_pedidoCinco o seisBajaRara vez
activo (sí/no)DosMuy bajaCasi nunca

La lógica es intuitiva: si filtrar por una columna booleana devuelve la mitad de la tabla, el motor concluye que es más rápido leer toda la tabla de corrido que saltar de un lado a otro siguiendo punteros. Por eso puede ignorar un índice que tú creaste con buena intención.

Índices compuestos y el orden de las columnas

Un índice puede abarcar varias columnas a la vez. Aquí el orden importa muchísimo y es fuente de confusión frecuente.

Un índice sobre (pais, ciudad, codigo_postal) se comporta como una guía telefónica ordenada primero por país, luego por ciudad y luego por código postal. Con esa estructura puedes buscar eficientemente:

  • Por pais solamente.
  • Por pais y ciudad.
  • Por las tres columnas juntas.

Pero no puedes usarlo eficientemente para buscar solo por ciudad, igual que no podrías usar una guía telefónica ordenada por apellido para encontrar a todos los que se llaman “Carlos”. Esta regla se conoce como el principio del prefijo izquierdo.

El precio que se paga

Si los índices solo tuvieran ventajas, se indexaría todo. No es así.

  • Escrituras más lentas. Cada INSERT, UPDATE o DELETE obliga a actualizar todos los índices afectados. Una tabla con ocho índices paga ese costo ocho veces.
  • Espacio en disco. Un índice puede ocupar una fracción considerable del tamaño de la tabla, y varios índices suman rápido.
  • Memoria. Los índices compiten por la caché con los propios datos.
  • Mantenimiento. Con el tiempo pueden fragmentarse y requerir reconstrucción.

Por eso un sistema con muchísimas escrituras y pocas lecturas necesita una estrategia de indexación distinta a un sistema de informes que casi solo consulta.

Cuándo el índice no se usa aunque exista

Este es un punto que frustra a mucha gente: el índice está creado, pero la consulta sigue lenta. Suele deberse a alguna de estas causas.

  • La columna está dentro de una función. Escribir WHERE YEAR(fecha) = 2026 impide usar el índice sobre fecha. Conviene reescribirlo como un rango: WHERE fecha >= '2026-01-01' AND fecha < '2027-01-01'.
  • Comodín al inicio. LIKE '%texto' no puede aprovechar el orden del índice, mientras que LIKE 'texto%' sí.
  • Conversión implícita de tipos. Comparar una columna numérica con un texto suele anular el índice.
  • Estadísticas desactualizadas. El planificador decide en función de estimaciones; si están obsoletas, toma malas decisiones.

Cómo verificarlo

No hace falta adivinar. Todos los motores ofrecen una forma de mostrar el plan de ejecución: EXPLAIN en MySQL y PostgreSQL, EXPLAIN ANALYZE para ejecutarlo realmente y medir, o el plan gráfico en SQL Server.

Lo que interesa es distinguir si el motor recorre la tabla completa o usa un índice. Una buena práctica es medir antes y después de crear el índice, en lugar de asumir que ayudó.

Una recomendación práctica

Empieza con lo mínimo: claves primarias y foráneas. Deja que el sistema funcione, identifica las consultas realmente lentas y crea índices para resolver esos casos concretos, midiendo el resultado. Indexar “por si acaso” tiende a generar tablas cargadas de índices que nadie usa pero que todos pagan en cada escritura.

Si quieres profundizar en modelado, SQL y optimización, en Cursa encontrarás cursos gratuitos de bases de datos que cubren desde el diseño de tablas hasta el ajuste de consultas.

Qué Es un Motor de Videojuegos y Cómo Funciona el Bucle de Juego

Descubre qué hace un motor de videojuegos, cómo funciona el bucle de juego y qué papel cumplen el renderizado, la física y el delta time.

Claves Primarias y Foráneas: Cómo se Relacionan las Tablas en una Base de Datos

Aprende qué son las claves primarias y foráneas, cómo conectan tablas, qué tipos de relaciones existen y por qué protegen la integridad de tus datos.

Qué Es el DNS: Cómo tu Navegador Encuentra un Sitio Web en Milisegundos

Entiende cómo funciona el sistema de nombres de dominio, qué son los registros A, CNAME y MX, y por qué a veces los cambios tardan.

Cifrado de Extremo a Extremo: Cómo Funciona y Qué Protege Realmente

Explicación sencilla del cifrado de extremo a extremo: claves pública y privada, qué protege, qué no protege y por qué importa.

Memoria RAM y almacenamiento: por qué no son lo mismo

Diferencias entre RAM y disco, qué hace cada uno, qué pasa cuando falta memoria y cuál conviene ampliar primero.

Qué es el DOM y Cómo lo Usa JavaScript para Cambiar una Página Web

Descubre qué es el DOM, cómo el navegador convierte el HTML en un árbol de nodos y cómo JavaScript lo modifica en tiempo real.

La Regla 3-2-1 de las Copias de Seguridad: Cómo Proteger tus Archivos de Verdad

Descubre en qué consiste la regla 3-2-1 de respaldo, los tipos de copia que existen y los errores más comunes al proteger la información.

Diagramas de flujo y pseudocódigo: cómo planificar un programa antes de escribirlo

Aprende a usar diagramas de flujo y pseudocódigo para diseñar algoritmos claros antes de escribir una sola línea de código.