SQLは以下のプロセスをどのように実行しますか; SSMSで実行しようとすると、アイテムごとに約15秒かかりますが、SQLエージェントジョブに入れると、出力を得るのにほぼ一生かかります。
ForProcessing is a list of items
OPEN ForProcessing
FETCH NEXT FROM ForProcessing into @HeaderID, @CompanyCode, @AssignedCompanyID, @BranchCode, @WorkDate
WHILE @@FETCH_STATUS = 0
BEGIN
-- EOD for S1 FILE (MMS FILE)
if exists (select 1 from mMiddlewareFiles where cType = 'O' and cVersion = @cVersion and cFile = 'S1FILE')
BEGIN
execute rmw_eod_S1_file @HeaderID, @AssignedCompanyID, @BranchCode, @WorkDate
END
-- EOD for SL FILE (CSA FILE)
if exists (select 1 from mMiddlewareFiles where cType = 'O' and cVersion = @cVersion and cFile = 'SLFILE')
BEGIN
execute rmw_eod_SL_file @HeaderID, @AssignedCompanyID, @BranchCode, @WorkDate
END
-- EOD for C FILE (CSA FILE)
if exists (select 1 from mMiddlewareFiles where cType = 'O' and cVersion = @cVersion and cFile = 'CFILE')
BEGIN
execute rmw_eod_C_file @HeaderID, @AssignedCompanyID, @BranchCode, @WorkDate
END
FETCH NEXT FROM ForProcessing into @HeaderID, @CompanyCode, @AssignedCompanyID, @BranchCode, @WorkDate
END
これらのプロシージャを呼び出す 1 つの大きなスクリプトを作成する代わりに、関数を個別に作成すると、パフォーマンスが大幅に向上しますか?
これに入るためのアドバイスはありますか?または、この種の手順を最適化する方法は?
編集:
私のこの問題に多少関連していますが、実行されたプロシージャ内で ff: 懸念が見つかりました
DECLARE @a, @b, @c, @d, @e, etc... --the list grows
SELECT @a = field2 from Parameters where field1 = 'UserName'
SELECT @b = field2 from Parameters where field1 = 'Name'
SELECT @c = field2 from Parameters where field1 = 'CompanyCode'
SELECT @d = field2 from Parameters where field1 = 'MachineNo'
SELECT @e = field2 from Parameters where field1 = 'Type'
私がここで尋ねたように
それを最適化する方法についてアドバイスをお願いします。テーブルを定義してからフィールドを定義し、1回の大きな時間の選択などを照会するなど、これを行う方が良いでしょうか..
誰かが次またはその間にフェッチから逃れるための良い代替手段を教えてくれるなら、そうしてください。