Re: Funcion SQL mas lenta que un SQL

From: "Omar Zeballos" <ozeballos(at)kantutani(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Funcion SQL mas lenta que un SQL
Date: 2008-03-11 14:09:30
Message-ID: 21db01c88381$878d66b0$1600a8c0@jefeproyectos
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Raul, para que este un poco mas claro, la sentencia

select a,b,c from tabla1 where fecha<=current_date and codproducto=100
union all
select a,b,c from tabla2 where fecha<=current_date and codproducto=100
union all
select a,b,c from tabla3 where fecha<=current_date and codproducto=100

TARDA 4seg, Pero cuando creo la funcion,

CREATE OR REPLACE FUNCTION sql_regenerastock(p_fecha date, p_codprod
numeric)
RETURNS SETOF regenerastock AS $BODY$
select a,b,c from tabla1 where fecha<=p_fecha and codproducto=p_codprod
union all
select a,b,c from tabla2 where fecha<=p_fecha and codproducto=p_codprod
union all
select a,b,c from tabla3 where fecha<=p_fecha and codproducto=p_codprod
LANGUAGE 'sql' VOLATILE;

y ejecuto select * from sql_regenerastock(current_date,100) esta tarda
70seg
No es un problema de indices, es un problema de colocar una consulta en una
funcion SQL y utlizarla, porque si observas bien es la misma consulta,
Saludos,
Omar.
_________________________________________________________________
----- Original Message -----
From: "Raul Lapitzondo" <raul(dot)lapitzondo(at)gmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Cc: "Omar Zeballos" <ozeballos(at)kantutani(dot)com>
Sent: Tuesday, March 11, 2008 7:00 AM
Subject: Re: [pgsql-es-ayuda] Funcion SQL mas lenta que un SQL

En principio no estas comparando lo mismo, tu primer consulta la que
no tiene funci'on no utiliza "where". Cuanto tarda la función si no
recibiera parámetros ejecutando esa unión ?.

Después con respecto al Where, habria que ver si los campos que se
condicionan, tienen indices, etc...

Saludos

El 10/03/08, Omar Zeballos <ozeballos(at)kantutani(dot)com> escribió:
>
>
> Lista,
> se me presento el problema desde la version 8.1.4, ahora estoy haciendo
> pruebas con la 8.2.6, y el problema persiste. Lo que suscede es que al
> realizar consultas del tipo
>
> select a,b,c from tabla1
> union all
> select a,b,c from tabla2
> union all
> select a,b,c from tabla3 --> TODO TARDA 4seg
>
> el tiempo de respuesta esta dentro el promedio aprox 4 segundos sobre un
> millon de registros. Sin embargo cuando coloco la misma sentencia en una
> funcion SQL es decir creo un objeto SQL de base con paramentros me tarda
> 70seg. es decir algo paso!!!. Haciendo pruebas pusimos esta funcion dentro
> de una segunda funcion y me tarda 140 seg. aprox, eso quiere decir que va
> aumentando.
> Creo una funcion SQL porque le paso 2 parametros para el where de cada
> union. Aca les mando el formato de la creacion de la funcion no la pongo
> toda porq es compleja pero les recuerdo que solo tarda 4 seg cuando corre
> sola.
>
>
>
> CREATE OR REPLACE FUNCTION sql_regenerastock(p_fecha date, p_codprod
> numeric)
> RETURNS SETOF regenerastock AS $BODY$
>
>
> select a,b,c from tabla1 where ...
> union all
> select a,b,c from tabla2 where ...
> union all
> select a,b,c from tabla3 where ...
> LANGUAGE 'sql' VOLATILE;
>
> select * from sql_regenerastock(p_fechaini,p_codprod) -->
> ESTA ES LA QUE TARDA EL DOBLE.
>
> Sera que debo parametrizar alguna variable de la base que usa funciones
> SQL
> en forma diferente? o cual puede ser la explicacion.
> Saludos,
> ________________________________________________________________
> Ing. Omar Zeballos Cspedes
> Grupo Empresarial Kantutani
>
>

--
Saludos
Raúl H. Lapitzondo
--
TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá
leerlo

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message MIGUEL CANCHAS 2008-03-11 14:11:06 RE: Demora mi consulta
Previous Message MIGUEL CANCHAS 2008-03-11 14:06:29 RE: cambiar encoding