2008/8/28 "Carlos Beltrán V." <[EMAIL PROTECTED]>:
> "        Hash Cond: (di.documentos_id = dd.documentos_id)"
> "        ->  Seq Scan on declaraciones_importacion di  (cost=0.00..18761.24 
> rows=20725 width=16)

                  (actual time=1070.900..1274549.934 rows=3305
loops=1)"
> "              Filter: 
> es_declaracion_modalidad_temporal(declaraciones_importacion_id)"

como dices esta filtrando esto primero. pero fijate ademas en el
estimado de filas a retornar... solo por casualidad has ejecutado
ANALYZE recientemente?

de todos modos, es evidente que esta creyendo que la funcion es "barata".
no mostraste el nivel de volatilidad con que estas marcando la
funcion: IMMUTABLE, STABLE o VOLATILE?

>
> La función es
>
> create or replace function es_declaracion_modalidad_temporal(bigint) returns
> boolean as '
> DECLARE
>  esta_declaracion_id ALIAS FOR $1;
>  es_temporal boolean;
>  esta_modalidad_id integer;
> BEGIN
>  SELECT modalidades_id into esta_modalidad_id  FROM items_declaracion_imp
> WHERE declaraciones_importacion_id =  esta_declaracion_id;
>  SELECT es_modalidad_temporal(esta_modalidad_id) INTO es_temporal;
>  return es_temporal;
> END;
>

esta funcion debes estarla marcando como STABLE, ademas no creo que
necesites una funcion plpgsql. podrias escribirlas asi:

create or replace function es_declaracion_modalidad_temporal(bigint)
returns boolean as '
 SELECT es_modalidad_temporal(modalidades_id)
    FROM (SELECT modalidades_id FROM items_declaracion_imp
                WHERE declaraciones_importacion_id =  $1) as foo;
' language sql stable;

create or replace function es_modalidad_temporal(int) returns boolean as '
  SELECT $1 IN (180000209, 180000198, 180000204, 180000210, 180000200,
180000206,
                          180000212, 180000199, 180000205, 180000211,
180000196, 180000197,
                          180100013, 180000203);
' language sql immutable;


-- 
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Asesoría y desarrollo de sistemas
Guayaquil - Ecuador
Cel. (593) 87171157
--
TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo

Responder a