多くのストアドプロシージャ、または複数のif-else支店を持つ1つのストアドプロシージャを持つことが良い場合、私は疑問に思って。マルチブランチの性能であれば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
私は、あなたの2つの手技のどちらが速いのかをあなたに伝えるためにインターネット上の人々を信頼しません。さまざまなパラメータで両方の方法で実行し、パフォーマンスの違いを自分で測定します。 –
これは非常に乱雑に聞こえ、その手順を実行するすべてのプロセスを中断させる可能性があり、エラーを更新する必要があります。それを行うことから得ることは何もありませんが、パフォーマンスとメンテナンスの悪夢です。 – Siyual