From: | "Jaime Casanova" <jcasanov(at)systemguards(dot)com(dot)ec> |
---|---|
To: | Carlos Beltrán V(dot) <cbeltran(at)roldan(dot)net> |
Cc: | ListaPostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Cómo cambio el plan de ejecución de un query |
Date: | 2008-08-29 03:55:46 |
Message-ID: | 3073cc9b0808282055p60696acdj617eb89e41c72de7@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
2008/8/28 "Carlos Beltrán V." <cbeltran(at)roldan(dot)net>:
> " 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
From | Date | Subject | |
---|---|---|---|
Next Message | Jaime Casanova | 2008-08-29 04:10:54 | Re: Cómo cambio el plan de ejecución de un query |
Previous Message | Alvaro Herrera | 2008-08-29 02:39:20 | Re: Left join anidados |