Al terminar, podrás
- Relacionar un índice con una consulta concreta.
- Proponer el orden de columnas de un índice compuesto.
- Usar un plan de ejecución como evidencia, sin prometer una mejora automática.
Recupera lo aprendido: ¿Qué diferencia hay entre una regla de integridad y una estructura para buscar filas?
La idea clave
Un índice es una estructura adicional que ayuda al motor a localizar filas sin recorrer siempre toda la tabla. Su utilidad depende de la consulta, la distribución de datos, el tamaño y el optimizador. También ocupa espacio y añade trabajo a las escrituras.
Secuencia profesional: consulta lenta → plan de ejecución → hipótesis de índice → nueva medición. Crear índices “por si acaso” puede empeorar el mantenimiento.
La sintaxis básica
CREATE INDEX idx_pedidos_cliente_fecha
ON pedidos (cliente_id, fecha);
SELECT id, fecha, total
FROM pedidos
WHERE cliente_id = 1
ORDER BY fecha;Ejemplo paso a paso
La consulta filtra primero por cliente_id y después ordena las filas de ese cliente por fecha. Por eso ese mismo orden de columnas es una candidata razonable para el índice.
SELECT id, fecha, total
FROM pedidos
WHERE cliente_id = 1
ORDER BY fecha;| id | fecha | total |
|---|---|---|
| 101 | 2025-05-02 | 128,40 |
| 103 | 2025-05-10 | 24,90 |
| 111 | 2025-06-01 | 249,00 |
Cómo evaluarlo
- Ejecuta
EXPLAINo la herramienta equivalente antes del cambio. - Crea el índice en un entorno de prueba y actualiza estadísticas cuando el motor lo requiera.
- Compara el plan y el tiempo con datos representativos; en una tabla de 18 filas, un recorrido completo puede seguir siendo la mejor decisión.
Un error habitual
Invertir las columnas sin mirar la consulta
CREATE INDEX idx_pedidos_fecha_cliente
ON pedidos (fecha, cliente_id);Para la consulta que exige igualdad por cliente y orden por fecha, (cliente_id, fecha) suele ajustarse mejor al patrón. El orden de un índice compuesto importa; no es una bolsa de columnas intercambiables.
Qué comprueba la práctica: el nombre del índice, la tabla y las columnas. Este motor educativo no reproduce el coste de acceso de un índice. Para comprobar una mejora de velocidad, usa EXPLAIN y mediciones sobre un motor real con suficientes datos.
Practica con datos
Laboratorio SQL
Resuelve la consulta
Escribe la sentencia SQL que cree el índice idx_pedidos_cliente sobre la columna cliente_id de pedidos.
Resultado esperado: el índice idx_pedidos_cliente sobre pedidos(cliente_id).
Ver tablas y datos
Cargando la estructura del ejercicio…
Identifica la columna usada en WHERE o JOIN.
Nombra el índice de forma descriptiva.
Mide antes y después en un entorno real.
Solución
CREATE INDEX idx_pedidos_cliente ON pedidos (cliente_id);cliente_id participa en la relación con clientes y puede ser una candidata razonable.
Puedes consultar la solución y volver a intentarlo. La práctica se completa cuando tu consulta funciona.
La consulta usa datos ficticios y se ejecuta solo en este navegador.
Fuentes técnicas consultadas
Todos los motores disponen de índices y planes, pero sus tipos, estadísticas, costes y herramientas de diagnóstico no son idénticos.
- PostgreSQL: índices
- PostgreSQL: uso de EXPLAIN
- SQLite: planificación de consultas
- MySQL 8.4: optimización e índices
- SQL Server: guía de diseño de índices
Comprueba si puedes explicarlo
¿Crear un índice garantiza que el motor lo use o que todas las consultas sean más rápidas?
Ver respuesta razonada
No. Depende de la consulta y los datos. Revisa el plan y mide en un motor real. El laboratorio comprueba la definición del índice, no reproduce su rendimiento.
Responde antes de abrir la explicación. Si necesitaste ayuda, cierra la respuesta y vuelve a explicarlo con tus palabras antes de dar la lección por aprendida.
Qué debes recordar
- Diseña índices para consultas observadas, no para columnas aisladas.
- El orden de las columnas de un índice compuesto cambia qué patrones puede resolver bien.
- Mide lecturas y escrituras antes y después.
A continuación: continúa con Práctica: diseña una tabla con reglas e índice.