【发布时间】:2010-11-06 06:34:02
【问题描述】:
我有一个将大约 8000 行插入到 TABLE 变量中的 SQL 脚本。
插入该变量后,我使用 WHILE 循环遍历该表并执行其他操作。那个循环大概有 60 行代码。
如果我运行脚本的 TABLE 变量插入部分,没有 while 循环,大约需要 5 秒。太好了。
但是,如果我运行整个脚本,大约需要 15 分钟。
以下是有趣的和我想不通的:
当我运行整个脚本时,直到脚本进入几分钟后,我才看到任何打印语句。
然后,一旦它确定了要做什么(大概),它就会将插入操作运行到表 var 中,执行循环,这一切都进行得相当快。
然后,在循环结束时,或者甚至在循环结束后,它会等待并挂起更多分钟。最后,它会遍历循环之后脚本的最后几行左右。
我可以计算插入过程中花费的所有时间,然后是循环中花费的所有时间。但我不明白为什么它在脚本之前和结尾处似乎挂了这么多分钟。
为了踢球,我在插入临时表之后添加了一个 GO 语句,到那时为止的所有内容都按照您的预期运行;但是,我不能这样做,因为我需要那个变量,而 GO 语句显然会杀死那个变量。
我相信我将停止使用 table 变量并使用真实的表,以便我可以发出 GO,但我真的很想知道这里发生了什么。
您对 SQL Server 在此期间的工作有何想法?
谢谢!
【问题讨论】:
-
能否提供脚本?不仔细研究就很难回答。
-
我可以,但它有@17000 行长!不过我会编辑并发布相关位
-
知道了……问题不在于插入或循环……而是循环之后的部分。我不知道为什么 sql server 花了这么长时间,但是一旦我摆脱了它(这是一个我重构的大“IN”语句),一切都很好。
标签: sql sql-server-2008