我可以在存储过程中同时进行SQL选择吗?

时间:2011-05-12 01:05:17

标签: sql-server-2008 stored-procedures concurrency

有没有办法在SQL Server 2008 SELECT中的存储过程中同时运行多个(parallel execution)语句?

如果是,必须遵循哪些步骤?

5 个答案:

答案 0 :(得分:2)

如果你的意思是你可以控制它,答案是否定的。

但是,如果您有多个选项,其中这些选择的结果不会相互影响,那么查询优化器通常会parallelise them for you,并且具有cpu能力的附带条件。

您可以在查看查询计划时看到此内容;

Parallel Query Plan

但您不会在Sql Express或任何开发人员版本中看到这一点,仅在完整的服务器版本上。

答案 1 :(得分:1)

您无法采取任何措施:

  • 一个批次中的多个DML语句不会同时运行

  • 您无法在

  • 上进行切换
  • 优化程序将根据查询,索引,成本等选择并行度:您无法将其切换

如果你有50个SELECT,我建议你做错了。你为什么不问你真正的问题:而不是你认为问题的解决方案是......

答案 2 :(得分:0)

你的场景不太清楚,也许你可以在几个SELECT上使用'UNION'。或临时表以保持中间结果。

答案 3 :(得分:0)

完全同意@blowdart - SQL通常会为您优化并行度。

你能做的唯一事情就是限制这种并行度,MAXDOP选项(最大并行度)。

SELECT [Id] FROM [Table] OPTION (MAXDOP 1)

另见:

http://support.microsoft.com/kb/329204

What is the purpose for using OPTION(MAXDOP 1) in SQL Server?

答案 4 :(得分:0)

您可以使用服务代理并行运行。我这样做了,我必须更新或插入15个不同的表中的许多行。我将update / insert语句设置到服务代理队列上,让它以并行方式运行。

排队有一些开销,但插入/更新足够大 - 这可能是有益的。