----- 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