PostgreSQL 12: CTEs Ahora Optimizan Consultas

Fuentes: PostgreSQL CTE Handling Changes Impact Query Optimization

Una actualización significativa en PostgreSQL 12 eliminó la barrera de optimización que antes imponían las Expresiones de Tabla Comunes (CTE). Anteriormente, en versiones anteriores a la 12, las CTEs obligaban a la base de datos a materializar los resultados, impidiendo que el optimizador viera a través de ellas y utilizara índices o reordenara uniones de manera eficiente. Con PostgreSQL 12, las CTEs no referenciadas una sola vez y sin efectos secundarios se integran automáticamente en la consulta principal, permitiendo al optimizador trabajar de manera más inteligente y mejorar el rendimiento. Esto ha cambiado la forma en que los desarrolladores escriben consultas, eliminando la necesidad de reescribir CTEs como subconsultas para obtener un mejor rendimiento. Aunque la materialización sigue siendo el comportamiento predeterminado para CTEs referenciadas múltiples veces o que contienen efectos secundarios, PostgreSQL 12 introduce las palabras clave MATERIALIZED y NOT MATERIALIZED para forzar explícitamente el comportamiento deseado. Este cambio se alinea con la optimización de inlining de vistas y simplifica el desarrollo de consultas.