Expresiones Comunes de Tabla (CTEs)
Las CTEs mejoran la legibilidad pero introducen peligros en el planificador y la recursión. Audita las consultas con muchas CTEs antes de producción.
Cómo Usar Esta Lista
- Revisa durante la PR de SQL para ver materialización oculta o profundidad de recursión.
- Usa
EXPLAIN ANALYZEdespués de añadir cadenas de CTEs. - Prefiere la legibilidad; refactoriza cuando resulte lento.
Comportamiento del Planificador (1-3)
-
Asumir que la CTE siempre está en línea - PostgreSQL puede materializar nodos
WITH(especialmente con recursión o ciertas referencias).- Por qué sucede: El planificador elige basándose en el costo; verifica con
EXPLAIN. - Solución:
undefined.
- Por qué sucede: El planificador elige basándose en el costo; verifica con
-
Referencias duplicadas de CTE - La misma CTE referenciada dos veces puede ejecutarse dos veces si no se materializa.
- Por qué sucede: Materializa con
AS MATERIALIZEDen PG 12+ cuando sea necesario. - Solución:
undefined.
- Por qué sucede: Materializa con
-
Filtrado después de una CTE enorme - Gran conjunto intermedio y luego
WHEREen la consulta externa.- Por qué sucede: Empuja los filtros al primer paso de CTE posible.
- Solución:
undefined.
Trampas de Legibilidad (4-5)
-
Cadenas de CTE demasiado profundas - Diez pasos
WITHdifíciles de probar.- Por qué sucede: Divide en vistas o tablas temporales en etapas para ETL.
- Solución:
undefined.
-
CTE recursiva sin guarda de ciclo - Recursión infinita hasta agotar
work_mem.- Por qué sucede: Rastrea nodos visitados; establece la profundidad máxima de recursión.
- Solución:
undefined.
Preguntas Frecuentes
¿Cuándo usar MATERIALIZED?
Cuando necesites una evaluación única de una CTE costosa referenciada múltiples veces.
Relacionados
- Conceptos Básicos de SQL Avanzado - Introducción a CTEs
- CTEs Recursivas - Jerarquías
Versiones de Stack: Esta página fue escrita para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x, y PostGIS 3.5+.