----- Mensaje original -----
> De: "José Alberto Sánchez Nieto (Trabajo)" <albertosanc...@hiperusera.es>
> Para: "Ernesto Lozano" <elozano...@gmail.com>
> CC: pgsql-es-ayuda@postgresql.org
> Enviados: Miércoles, 21 de Diciembre 2016 15:10:05
> Asunto: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Función con select se ejecutar 
> muy lenta comparada con la ejecución de
> select fuera de la función
> 
> Hola Ernesto, la versión que utilizo es la 9.6.1 y lo que utilizo es
> lo siguiente:
> - Desde shell:
> select * from d_articulo where id_articulo = ‘2097’
> Con el explain plan me dice que utiliza un index scan lo cual es
> correcto ya que tengo un índice por ese campo y el tiempo de
> ejecución es 0.045ms
> 
> 
> -Desde función:
> CREATE OR REPLACE FUNCTION prueba_velocidad(
> v_id_articulo character varying
> RETURNS void AS
> $BODY$
> DECLARE
> vv_reg_articulo record;
> BEGIN
> EXECUTE ‘SELECT * FROM d_articulo WHERE id_arjticulo = ‘ ||
> quote_literal($1)
> INTO vv_reg_articulo
> USING v_id_articulo;
> 
> 
> RETURN;
> END;
> $BODY$
> LANGUAGE plpgsql STABLE
> COST 100;
> ALTER FUNCTION prueba_velocidad(character varying)
> OWNER TO valmanar;
> 
> 
> Y la ejecuto con: select prueba_velocidad(‘2097’) dándome unos
> tiempos de 0.229ms
> He probado sin el quote_literal simplemente con $1 y tampoco,
> evidentemente también probé sin el execute poniendo la query normal
> cómo la del shell y sigue dándome unos tiempos muy altos. ¿Qué puede
> ser?.
> Gracias por la ayuda y saludos.

Me suena razonable esos tiempos, porque estas añadiendo un overhead considerable
1) Utilizando pl/pgsql en lugar de SQL,
2) Utilizando EXECUTE

Proba haciendo una funcion el SQL, ya que para este caso al menos, usar pl no 
tiene mucho sentido.

HTH
Gerardo

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a