この質問は、私が今までSQL Serverから見た動作であるbizarrestの動作についての解説についての解決策を見つけることではありません。ストアドプロシージャのパフォーマンス - これはWILDですか?
私は、次のシグネチャを持つストアドプロシージャを持っていた: - 約2分のパラメータの特定の集合が与えられる
alter procedure MySP @param1 uniqueidentifier,
@param2 uniqueidentifier,
@param3 uniqueidentifier
、このprocが(SqlCommand.ExecuteReader()
を使用して)は、C#から実行するには非常に長い時間を取っていました。直接クエリセッションで同じパラメータを使用すると、SPは2秒未満で実行されました。
それは長い時間がかかったし、私も私たちは、このソリューションにつまずいた方法を説明しようとはしませんが、これは我々がやったことです:
SPの冒頭で、我々は3つのローカル変数を宣言し、パラメータの値にそれらを割り当てられ、そのように:その後、
declare @param1_copy uniqueidentifier,
@param2_copy uniqueidentifier,
@param3_copy uniqueidentifier
select @param1_copy = @param1,
@param2_copy = @param2,
@param3_copy = @param3
そして、SPの残りの部分で、私たちはローカルコピーと入力パラメータへのすべての参照を置換しました。
Voila。 SPは2秒以内に実行されます。そして、ここのチームはうっかりされています。
今、紳士服と紳士は誰でもこの行動を説明できますか?
素晴らしい。実現せずに教科書のソリューションを見つけました! –