Buenos días compañeros.

Ahora que estoy haciendo pruebas en la versión 8.3.3 para migrar, me encuentro con este comportamiento.

El planeador no ejecuta primero el filtro correspondiente al SELECT interno, y por lo tanto la complejidad del SELECT total sube por número de líneas al count() de la tabla más compleja que es la primera que aparece en el SELECT interno.

Cabe aclarar que este comportamiento era diferente en las versiones 8.2.6 y anteriores.

SELECT pd.declaraciones_importacion_id
FROM
(SELECT
di.declaraciones_importacion_id
FROM
declaraciones_importacion di,
documentos d,
documentos_do dd
WHERE
di.documentos_id = d.documentos_id AND
d.documentos_id = dd.documentos_id AND
dd.dos_id = 180000000003039842) AS pd
WHERE es_declaracion_modalidad_temporal(pd.declaraciones_importacion_id)

Cómo se nota la última condición que deseo que se evalúe es una Plpgsql y esas llamadas sólo deben ser hechas cuando ya haya sido filtrado por el SELECT interno.

Con el actual estado de la base de datos y el ejemplo antes descrito un EXPLAIN ANALYZE corrido en las dos versiones (8.2.6 y 8.3.3) da una diferencia abismal ya que en 8.3.3 entra a evaluar la función PL por cada linea de la tabla declaraciones_importacion.

De antemano gracias por las luces que me puedan brindar en la solución de esta inquietud.

Carlos.
--
TIP 8: explain analyze es tu amigo

Responder a