Actual database access seems about the same, but from everything I have seen, PL/V8 always beats PL/pgSQL in terms of performance for logic.
create extension if not exists plv8; create or replace function fizz_buzz_plv8() returns text volatile language plv8 as $$ var result = ""; for(var i=0; i <= 100000; i++) { if(i % 3 == 0) result += "Fizz"; if(i % 5 == 0) result += "Buzz"; if(result == "") result += i; } return result; $$; create or replace function fizz_buzz_plpgsql() returns text volatile language plpgsql as $$ declare result text = ''; begin for i in 0 .. 100000 loop if i % 3 = 0 then result = result || 'Fizz'; end if; if i % 5 = 0 then result = result || 'Buzz'; end if; if result = '' then result = result || i; end if; end loop; return result; end $$; select fizz_buzz_plv8(); // 52 ms select fizz_buzz_plpgsql(); // 1292 ms
1 comment:
concatenation, eg,
result = result || 'Fizz';
is very expensive in plpgsql.
allocation / deallocation is expensive, and no string buffer optimizations are taken.
Post a Comment