PostgreSQL es una base de datos seria. Con el conocimiento correcto, puede manejar millones de registros sin drama. Sin él, fácilmente se vuelve lenta.
Índices: acelera queries sin duplicar datos
Un índice es una estructura que permite buscar filas rápidamente sin revisar todas. El costo es espacio en disco y tiempo en writes. El beneficio es que reads se vuelven mucho más rápidas.
La decisión correcta de índices es el 90% de la optimización en bases de datos.
- Índices en columnas que filtras o sorteas frecuentemente.
- Índices compuestos si filtras por varias columnas juntas.
- Evita índices que no usas: solo ralentizan writes.
EXPLAIN: tu mejor amigo para debugging de queries
EXPLAIN ANALYZE te muestra exactamente cómo PostgreSQL ejecuta una query. Si usa un índice o hace table scan. Cuántas filas procesa. Dónde está el cuello de botella.
Con esa información, puedes tomar decisiones de índices o reescritura de queries basadas en hechos, no en intuición.
- Ejecuta EXPLAIN ANALYZE en queries lentas.
- Busca table scans donde quizá debería usar índices.
- Identifica joins ineficientes.
Queries que escalan: evita loops y problemas comunes
Un error típico es hacer queries en loops: para cada resultado, hace otra query. Eso tiene complejidad N+1 que es desastrosa en performance.
Otro es usar LIKE sin prefijo fijo: buscar "%texto%" usa index, pero "%x" o "x%" no pueden usar índice btree.
- Evita N+1: usa JOINs en lugar de loops.
- LIKE con prefijo fijo: "dato%" funciona con índice.
- Agrupa y filtra en una query, no en aplicación.
Conexiones y pooling: no abres 1000 conexiones a la base
Cada conexión es costosa. Con pooling (PgBouncer, pgpool), múltiples clientes comparten conexiones. El resultado es que puedes servir más load sin saturar la base de datos.
En Prisma, configura max_pool_size según tu carga esperada.
Cada conexión a PostgreSQL es una vaca que come recursos. Con pooling, compartes vacas, no crezcas un rebaño infinito.
Monitoreo en producción
Mantén un ojo en: tamaño de caché (si es bajo, lo lees todo del disco), vacío de tablas (si no lo haces, queries lentas), integridad de índices (si se rompen, se queda sin usar).
Herramientas como pg_stat_statements te muestran qué queries consumen más CPU, así sabes dónde enfocarte.