PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Funktion wird ohne STRICT-Modifikator schneller ausgeführt?

Vielleicht ein Overhead durch den wiederholten Funktionsaufruf, der durch Inlining der Funktion reduziert wird?

Das würde ich vermuten. Sie haben da einen sehr einfachen Ausdruck. Ein tatsächlicher Funktionsaufruf beinhaltet vermutlich den Aufbau des Stacks, die Übergabe von Parametern usw.

Der folgende Test ergibt Laufzeiten von 5 ms für Inline und 50 ms für 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;