Какая разница в написании что-то вроде этого:
SET SCHEMA 'schema';
SELECT table2.field1,
table2.field2,
table2.field3,
table2.field4,
table2.field5,
table2.field6
FROM table2
WHERE table2.field1 LIKE '%{$search}%' and table2.field2 LIKE '%{$search2}%' and table2.field3 LIKE '%{$search3}%' and table2.field4 LIKE '%{$search4}%' and (table2.field5 ~* '{$search5}' {$radioa} table2.field6 ~* '{$search6}')
ORDER BY table1.field1 DESC, table1.field2 LIMIT {$radiob};
А что-нибудь в plpgsql? Что я имею в виду — получу ли я больше пользы от скорости или эффективности, если перевожу вышеупомянутое в plpgsql? Должен ли я придерживаться вежливого, динамического выражения в PHP или идти бананом с plpgsql?
Время выполнения запросов одинаково в обоих случаях. Это не важно, если вы запускаете запрос от клиента из PLpgSQL. Разница заключается в обработке результатов. Когда вы обрабатываете результат на стороне сервера (из PLpgSQL), тогда затраты на преобразование сети и типов данных равны нулю. Обработка данных на стороне клиента намного дороже — для часто вызываемых запросов или большого результата обработка на стороне клиента значительно медленнее.
Другое преимущество хранимой процедуры (код на стороне сервера) — доступность из гетерогенной среды (вы можете хорошо поделиться этим кодом). Код PHP можно вызывать просто только из PHP или по протоколу HTTP. Но это преимущество не имеет существенного значения в монолитных средах (все это Java или все это PHP).
Других решений пока нет …