PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

A função é executada mais rapidamente sem o modificador STRICT?


Talvez uma sobrecarga da chamada de função repetida que é simplificada pela função embutida?

Isso é o que eu acho. Você tem uma expressão muito simples aí. Uma chamada de função real presumivelmente envolve configuração de pilha, passagem de parâmetros etc.

O teste abaixo fornece tempos de execução de 5ms para embutido e 50ms para estrito.
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;