gpt4 book ai didi

sql - 帮助优化 SQL While 循环

转载 作者:行者123 更新时间:2023-11-29 09:15:44 24 4
gpt4 key购买 nike

我需要帮助,请优化下面的 SQL While 循环。在此恳请有这方面经验的 friend 帮忙解答一下。目前,我的 T-SQL 代码运行时间超过 25 分钟,我希望尽可能缩短该时间。我能够确定这个循环是一个主要问题领域,并且希望能得到任何帮助来完成这个任务。

 DECLARE @rownumber int

DECLARE @power_show BIT

DECLARE @AD_show BIT

set @rownumber = 0

--FOR EACH ROW CONTAINED IN MY TEMPTABLE

WHILE @rownumber < @rowcounter

BEGIN
set @rownumber = @rownumber + 1

-- THE VARIABLES
DECLARE @record_no as BIGINT
DECLARE @phone_name VARCHAR(30)
DECLARE @messagepriority as INTEGER
DECLARE @phone_number VARCHAR(30)
DECLARE @phone_id BIGINT
DECLARE @questionMessage BIGINT

SELECT
@phone_name = n.phone_name, @phone_number =n.phone_number, @messagepriority =n.messagepriority, @phone_id=n.phone_id ,
@AD_show=n.AD_show, @power_show=n.power_show
FROM
#temporary_phonetable n WITH(NOLOCK)
WHERE n.rownumber = @rownumber

--EXECUTE STOREDPROC ADDMESSAGETOQUEUE WHICH RETURNS THE ROWID OF THE NEWLY CREATED ROW, IF ANY
SELECT @record_no = sp_queryExecute AddMessageToQueue(@phone_number, @responsemessages, @dateresponsessent, @savednames, @userid, un.messagepriority, @responsetype, un.AD_show, un.power_show, @service_provider, @PhoneType)


If(@questionid > 0)
BEGIN
-- EXECUTE STOREDPROC ADDQUESTIONMESSAGE WHICH RETURNS THE ROWID OF NEWLY CREATED ROW, IF ANY
SET @questionMessage = sp_queryExecute AddQuestionMessage(@questionid,@phone_id, @record_no, DATEADD(d, 30, GETDATE()) )
END

-- ADD THE NEW ROWID TO THE TEMP TABLE
UPDATE #temporary_phonetable SET record_no = @record_no, questionMessage=@questionMessage
WHERE phone_number = @phone_number AND rownumber = @rownumber
END

最佳答案

我认为优化不需要在你的循环中进行。我建议检查存储过程中发生的情况。第一个答案是正确的,你应该将声明移到循环之外。但我不认为这会节省大量时间。

附录:值得在不使用游标和循环的情况下尝试执行此操作。

关于sql - 帮助优化 SQL While 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4251764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com