PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

La fonction s'exécute plus rapidement sans modificateur STRICT ?

Peut-être un surcoût dû à l'appel de fonction répété qui est simplifié en incorporant la fonction ?

C'est ce que je suppose. Vous avez là une expression très simple. Un appel de fonction réel implique vraisemblablement la configuration de la pile, la transmission de paramètres, etc.

Le test ci-dessous donne des temps d'exécution de 5 ms pour l'inline et de 50 ms pour le 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;