@User99

Что быстрее процедуры postgresql или sql запросы в базу из приложении?

Не знаю как точно задать вопрос.
Есть ли какая то разница при обращении к БД из приложении?
Использую POSTGRESQL, DAPPER, .NET Core
Например, создаю функцию (function postgres) выборки :
spoiler

CREATE FUNCTION gradebook.transcript_traditional_dislist(group_id_ bigint)
RETURNS TABLE(
	id bigint,
	dis_id bigint,
	group_id bigint,
	sem integer,
	method integer,
	ugod_id bigint,
	create_iin character varying,
	create_date date,
	create_time time without time zone,
	gr character varying,
	index_ru character varying,
	name_ru character varying
)
LANGUAGE SQL 
AS $$
SELECT m.*,up_d.index_ru,up_d.name_ru FROM gradebook.mains as m
LEFT OUTER JOIN uchast.uplans_dises as up_d ON up_d.id=m.dis_id 
WHERE m.group_id=group_id_ ORDER BY up_d.name_ru ASC
$$;


и обращаюсь через приложение к нему так:
spoiler

(await conn.QueryAsync<TranscriptTraditionalDislist>(@"
SELECT * FROM gradebook.transcript_traditional_dislist(@group_id)", new { group_id = group_id })).ToList();


или же напрямую из приложении запросом:
spoiler

(await conn.QueryAsync<TranscriptTraditionalDislist>(@"
SELECT m.*,up_d.index_ru,up_d.name_ru FROM gradebook.mains as m
LEFT OUTER JOIN uchast.uplans_dises as up_d ON up_d.id=m.dis_id 
WHERE m.group_id=@group_id ORDER BY up_d.name_ru ASC", new { group_id = group_id })).ToList();

Есть ли разница в плане защищенности, в плане быстродействия и т.п. как пользоваться?
  • Вопрос задан
  • 355 просмотров
Решения вопроса 1
1. Небольшая экономия, за счёт того что не нужно длинный запрос по сети передавать, а только короткий вызов процедуры (относительно)
2. В плане защищённости разницы нет, если злоумышленник имеет доступ к исполняемому файлу/исходнику.
3. Из потенциальных удобств - можно менять запрос, не затрагивая приложение.

Так что выбирай тот способ, который в твоём случае более оправдан.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
MANAB
@MANAB
Разрабатываю на C#: Web, Desktop, Gamedev
В плане удобства лучше вариант напрямую из приложении запросом - логика не разбивается на несколько мест и легче потом разбираться и править. По скорости здесь различий почти не будет.
Вот если бы у тебя была процедура, которая делает несколько запросов, что-то копирует, инсертит/апдейтит, в общем такая логика, которая бы потребовала несколько запросов вместо вызова функции/процедуры, то в таком случае конечно процедура/функция значительно быстрее отработает и тут уже баланс между удобством для сопровождения проекта и скоростью выполнения запросов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы