Índices para consultas habituales
Añada índices para las consultas que ejecutará con más frecuencia: por usuario, por fecha y por clave foránea, y mida el impacto con EXPLAIN.
Índices para consultas habituales es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué es un índice?
Un índice es una estructura de datos independiente en disco que permite a la base de datos encontrar filas por el valor de una columna sin explorar toda la tabla. La implementación clásica es un árbol B.
Los índices intercambian escrituras por lecturas
Cada índice hace que INSERT/UPDATE/DELETE sean ligeramente más lentos (el índice también debe actualizarse). No añada índices que no necesite.
Las claves primarias obtienen un índice automáticamente
Declarar PRIMARY KEY crea automáticamente un índice B-tree único. Lo mismo ocurre con las columnas UNIQUE.
Indexe las columnas de las claves foráneas
PostgreSQL NO indexa automáticamente el lado hijo de una FK. Añada siempre un índice: sin él, eliminar un padre explora todos sus hijos:
CREATE INDEX comments_post_id_idx ON comments(post_id);
CREATE INDEX comments_author_id_idx ON comments(author_id);Indexe las columnas usadas en WHERE
Si filtra a menudo por created_at, cree un índice:
CREATE INDEX posts_created_at_idx ON posts(created_at DESC);
-- Query benefits:
SELECT * FROM posts ORDER BY created_at DESC LIMIT 20;Índices compuestos
Para filtros con varias columnas, un índice compuesto puede ser mucho más rápido que dos índices de una sola columna:
CREATE INDEX posts_author_published_idx
ON posts(author_id, published_at DESC);
-- This query uses the index for both filter and sort:
SELECT * FROM posts
WHERE author_id = 42
ORDER BY published_at DESC LIMIT 10;Regla del prefijo izquierdo
Un índice compuesto (a, b, c) puede servir para WHERE a = ? y WHERE a = ? AND b = ?, pero NO para WHERE b = ? por sí solo. El orden importa.
Índices parciales
Indexe únicamente las filas que consulta:
-- Only published posts:
CREATE INDEX posts_published_idx
ON posts(published_at DESC)
WHERE published_at IS NOT NULL;
-- Smaller index, faster lookups for the common case.Índices sobre expresiones
Indexe una función aplicada a una columna:
CREATE INDEX users_email_lower_idx ON users(LOWER(email));
-- Query that uses it:
SELECT * FROM users WHERE LOWER(email) = LOWER($1);No cree índices en exceso
Reglas prácticas:
- Indexe las PK ✓ (automático)
- Indexe las columnas UNIQUE ✓ (automático)
- Indexe las columnas FK ✓
- Indexe las columnas usadas en WHERE / JOIN / ORDER BY en sus consultas más frecuentes
- No indexe columnas con una selectividad muy baja (por ejemplo, un booleano con una distribución 50/50)
Mida con EXPLAIN
Antes y después de añadir un índice, ejecute EXPLAIN ANALYZE para verificar que el planificador lo está utilizando:
EXPLAIN ANALYZE
SELECT * FROM posts WHERE author_id = 42 ORDER BY published_at DESC LIMIT 10;Resumen
Para nuestro blog: indexe las FK (post_id en comments, author_id en posts y comments) y (author_id, published_at DESC) en posts para las consultas de «últimas publicaciones por usuario».
Comprobación rápida
Ha añadido una clave foránea orders.user_id REFERENCES users(id). ¿Qué índice debería crear, si debe crear alguno?
Preguntas frecuentes
¿La lección «Índices para consultas habituales» es gratis?
Sí — el texto completo de «Índices para consultas habituales» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Índices para consultas habituales»?
Añada índices para las consultas que ejecutará con más frecuencia: por usuario, por fecha y por clave foránea, y mida el impacto con EXPLAIN. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Índices para consultas habituales»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Modelado de un blog: usuarios, publicaciones y comentarios
- Elección de claves y tipos
- Índices para consultas habituales
- Carga de datos de prueba en la base de datos