Prácticas recomendadas avanzadas de SQL
SQL avanzado es rentable cuando es legible y medido.
Cómo usar esta lista
- Exige
EXPLAINpara nuevas consultas CTE/window/lateral. - Almacena SQL complejo en el repositorio, no en cadenas ORM ocultas.
A - Claridad
- Nombra las CTEs por paso de negocio. No
cte1. - Comenta las suposiciones invariantes. Valores de estado documentados.
- Limita el SQL dinámico a casos probados. Riesgo de inyección y de plan.
B - Rendimiento
- Ejecuta
EXPLAIN ANALYZEantes de producción. Especialmente nodos de ventana y ordenación. - Indexa las claves
PARTITION BYyJOIN. Coincide conORDER BYde ventana. - Materializa una CTE costosa una vez cuando se reutiliza.
AS MATERIALIZED.
C - Seguridad
- Controla la profundidad de las CTE recursivas. Detección de ciclos.
- Prueba las filas de partición
NULL. Marcos de ventana con datos dispersos. - Versiona el SQL con migraciones. Diferencias revisables.
Preguntas frecuentes
¿Deben los ORM poseer SQL avanzado?
Deja que el ORM haga el CRUD; archivos SQL sin procesar para informes y canalizaciones complejas.
Relacionado
- Funciones de ventana - análisis
- Conceptos básicos de EXPLAIN - planes
Versiones de la pila: Esta página se escribió para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x y PostGIS 3.5+.