Как 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
Если я должен создать функцию отдельно, вместо того, чтобы иметь один большой скрипт, который вызывает эти процедуры, значительно ли это приведет к увеличению производительности?
Проконсультируйтесь с этим? или как оптимизировать эту процедуру?
EDIT:
Несколько связанного с этим вопросом шахты, внутри исполняемой процедуры я нашел и далее: относится
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'
Как я здесь спросил SO
I хотите посоветовать о том, как его оптимизировать, лучше ли это сделать, например определить таблицу, а затем поля и просто запросить 1 раз большое время ct или тому подобное.
Если бы кто-нибудь мог также дать мне хорошую альтернативу, как убежать от следующего или пока, пожалуйста, сделайте это.
Вы, кажется, не будет продвижения курсора - это то, что просто копирования и вставки ошибка? –
Это была ошибка копирования, я отредактирую ее через некоторое время. –
В зависимости от количества строк в курсоре, вы смотрите на огромную работу подряд за строкой. Что в муках SP, которые вы выполняете? – LoztInSpace