Хочется выжать максимум из функции.
Сейчас:
"Function Scan on generate_series (cost=0.00..260.00 rows=1000 width=0) (actual time=19.389..2303.164 rows=100000 loops=1)"
"Planning time: 0.026 ms"
"Execution time: 2329.626 ms"
После записи функции в одну строку стало гораздо быстрее:
CREATE OR REPLACE FUNCTION next_id(OUT result bigint) AS $$
DECLARE
our_epoch constant bigint := 1314220021721;
shard_id constant smallint := 5;
BEGIN
result := ((FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 1000) - our_epoch)::bigint << 23) | (shard_id << 10) | (nextval('seq') % 1024);
END;
$$ LANGUAGE PLPGSQL;
"Function Scan on generate_series (cost=0.00..260.00 rows=1000 width=0) (actual time=16.083..700.774 rows=100000 loops=1)"
"Planning time: 0.026 ms"
"Execution time: 716.802 ms"
Я мало знаком с PostgreSQL. Нормально ли написана данная функция? Есть ли что еще можно ускорить?
И еще вопрос.