SQL中的多线程?

时间:2014-06-26 08:55:04

标签: sql query-performance

我有一个SQL查询,如

SELECT Column1, Column2, Column3, **ufn_HugeTimeProcessFunction**(Column1, Column2, @Param1) As Column4
From Table1

这个 ufn_HugeTimeProcessFunction 函数针对大表(就行数而言)运行,后面有几个计算返回值。

我是否能够强制SQL编译器在另一个线程(进程)中运行该函数?

编辑:基本上该功能从3个不同的数据库中获取数据。这就是为什么我计划“并行”运行它,而且无法更改其他数据库上的索引

1 个答案:

答案 0 :(得分:4)

  

如果运行SQL Server的服务器计算机有多个CPU,则SQL Server可以使用多个线程并行运行单个查询。除了在多个处理器上运行用户查询外,SQL Server还可以使用多个线程来构建索引。在检查文本或图形执行计划时,如果查询使用多个处理器,您将注意到交换运营商分发流,重新分区流和收集流。通常,大量使用CPU周期的查询是并行执行的理想选择。例如,在将输出返回给用户之前连接几个大表并对输出进行排序的查询可能会从并行执行计划中受益。

简而言之,SQL服务器本身可以很好地判断查询是否可以在多个线程中运行。基本上,查询优化器会查看查询的某些部分是否可以并行运行并进行调用。

  

如果查询包含不能并行运行的标量运算符或关系运算符,则不会考虑并行执行。此外,如果要操作的行数相对较少,查询优化器不会考虑并行执行计划。

按照你的说法,这个功能非常耗时。所以外部选择和功能肯定会在不同的线程上运行。但是,如果没有ufn_HugeTimeProcessFunction的可见性,提供优化并行运行功能的解决方案将非常困难。如果没有,我建议你看一下该函数的执行计划,看看你是否可以调整查询以减少标量和关系运算

引用来源:http://www.toadworld.com/platforms/sql-server/w/wiki/9824.parallel-query-processing.aspx

有关在分析执行计划后使用并行度的更多信息,请访问https://www.simple-talk.com/sql/learn-sql-server/understanding-and-using-parallelism-in-sql-server/