VH
Обычно разработчики в борьбе за скорость движутся по траектории ORM->SQL->PLpgSQL.
Те. сначала приложение работает с базой посредством какого-то ORM, потом критичные места переписываются на прямые SQLщапросы, если же и это не помогает, то пишут серверную процедуру. С процедурами основная проблема заключается в отладке и поддержке.
На простых запросах узким местом сейчас становится кана связи между клиентов и сервером. Т.е. 100% загрузить современный мощный сервер простыми OLTP запросами не так то просто: мы упрёмся в сетку и систем каллы, а не в производительность базы. В этом отношении - stored procedures, которые могут запустить сразу много запросов на стороне сервера - это путь преодоления этого бутылочного горлышка.
Но иногда встроенные процедуры могут и тормозить. Это связано с тем, что все не динамические запросы и встроенных процедур препарятся. Т.е. постгрес пытается использовать для них generic plan, не зависящий от конкретных значений параметров. При сильно перекошенных данных это может привести к значительному проседанию на некоторых наборах параметров.
>В этом отношении - stored procedures, которые могут запустить сразу много запросов на стороне сервера - это путь преодоления этого бутылочного горлышка.
Так же если исползовать секции with в рамках хранимых процедур вы рискуете выбрать всю доступную память для коннекта и налететь на SWOP данных ... что значительно уменьшит скорость работы
