Мне интересно, если лучше иметь много хранимых процедур или одну хранимую процедуру с несколькими ветвями if-else.Производительность многоинтерфейсной инструкции If в SQL (Sql Server 2008)
Я понимаю, что SQL Server создаст план выполнения, основанный на самом последнем выполнении хранимой процедуры, поэтому при следующем выполнении хранимой процедуры с другим параметром, который ведет к другому пути в инструкции IF, то другой план выполнения будет скомпилирован и кэширован.
Мой руководитель сказал, что он хотел бы сократить количество хранимых процедур в нашей окружающей среде и дал нам указание использовать инструкции if-else для случая между различными регионами, для которых у нас есть данные. .
if(@iso = 'Item1')
begin
if(@type = 'A')
begin
end
if(@type = 'B')
begin
end
if(@type = 'C')
begin
end
end
if(@iso = 'Item2')
begin
if(@type = 'A')
begin
end
if(@type = 'D')
begin
end
end
if(@iso = 'Item3')
begin
if(@type = 'B')
begin
end
if(@type = 'E')
begin
end
end
Когда эта хранимая процедура выполняется, очень вероятно, что каждый раз будут выдаваться разные параметры. Является ли это причиной много противоречий с базами данных, поскольку планы выполнения постоянно регенерируются?
В чем цель сокращения количества хранимых процедур? Что вы получаете от этого? Это первое, что я хотел бы спросить. – mikeb
Я бы не стал доверять людям в Интернете, чтобы рассказать вам, какая из ваших двух процедур выполняется быстрее. Запустите его в обоих направлениях с различными параметрами и измерьте разницу в производительности для себя. –
Это звучит очень грязно и потенциально может разрушить каждый процесс, который проходит через эту процедуру, если вы сделаете ошибку, обновив ее. Из этого нечего выиграть, кроме кошмара производительности и обслуживания. – Siyual