PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

La funzione viene eseguita più velocemente senza il modificatore STRICT?

Forse un sovraccarico dalla chiamata di funzione ripetuta che viene semplificato incorporando la funzione?

Questo è quello che direi. Hai un'espressione molto semplice lì. Presumibilmente un'effettiva chiamata di funzione implica l'impostazione dello stack, il passaggio di parametri ecc.

Il test seguente fornisce tempi di esecuzione di 5 ms per inlined e 50 ms per strict.

BEGIN;

CREATE SCHEMA f;

SET search_path = f;

CREATE FUNCTION f1(int) RETURNS int AS $$SELECT 1$$ LANGUAGE SQL;
CREATE FUNCTION f2(int) RETURNS int AS $$SELECT 1$$ LANGUAGE SQL STRICT;

\timing on
SELECT sum(f1(i)) FROM generate_series(1,10000) i;
SELECT sum(f2(i)) FROM generate_series(1,10000) i;
\timing off

ROLLBACK;