Postgresql с функцией Wrap SQL так медленно? - PullRequest
0 голосов
/ 12 ноября 2018

первый sql объяснить, проанализировать:

explain  analyse  select * from ttq.ttq_post;
Seq Scan on ttq_post  (cost=10000000000.00..10000000014.71 rows=171 width=547) (actual time=0.005..0.027 rows=176 loops=1)
Planning Time: 0.033 ms
Execution Time: 0.041 ms

, но если использовать функцию, оберните тот же sql
например:

create or replace function ttq.test_fn_slow() 
  returns  setof ttq.ttq_post 
  language  sql 
  stable 
as $$
select * from ttq.ttq_post;
$$

и функцию удара exec:

explain  analyse  select ttq.test_fn_slow();

результат:

ProjectSet  (cost=0.00..5.27 rows=1000 width=32) (actual time=0.063..0.175 rows=176 loops=1)
  ->  Result  (cost=0.00..0.01 rows=1 width=0) (actual time=0.001..0.001 rows=1 loops=1)
Planning Time: 0.013 ms
Execution Time: 0.192 ms

зачем использовать перенос функций так медленно?

попробуйте использовать "immutable" вместо "stable", но результат тот же!

1 Ответ

0 голосов
/ 13 ноября 2018

Дополнительные расходы должны быть связаны с тем, что вы используете функцию возврата набора в предложении SELECT, а не в предложении FROM.

Обратите внимание, что обработка набора возвращающих функций впредложение SELECT изменено в PostgreSQL v10, поэтому ваша версия может повлиять на это поведение.

...