SQL中的多线程?

SQL中的多线程?,sql,query-performance,Sql,Query Performance,我有一个SQL查询,比如 SELECT Column1, Column2, Column3, **ufn_HugeTimeProcessFunction**(Column1, Column2, @Param1) As Column4 From Table1 这个ufn_HugeTimeProcessFunction函数运行在一个大表上(以行数为单位),返回值需要进行多次计算 我是否能够强制SQL编译器在另一个线程(进程)中运行该函数 编辑:基本上该函数从3个不同的数据库获取数据。这就是为什么我

我有一个SQL查询,比如

SELECT Column1, Column2, Column3, **ufn_HugeTimeProcessFunction**(Column1, Column2, @Param1) As Column4
From Table1
这个ufn_HugeTimeProcessFunction函数运行在一个大表上(以行数为单位),返回值需要进行多次计算

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


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

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

简言之,SQL server本身是判断查询是否可以在多个线程中运行的好方法。基本上,查询优化器会查看查询的各个部分是否可以并行运行并接受调用

如果查询包含无法并行运行的标量运算符或关系运算符,则不会考虑并行执行。此外,如果要运行的行数相对较低,查询优化器不考虑并行执行计划。 照你说的,这个函数很耗时。因此,外部选择和函数肯定会在不同的线程上运行。但是,如果不了解ufn_HugeTimeProcessFunction,就很难为并行运行提供优化函数的解决方案。如果没有,我建议您查看函数的执行计划,看看是否可以调整查询以减少标量和关系操作

报价来源:


有关分析执行计划后使用并行性的更多信息,请访问

您确定这是CPU瓶颈吗?除非写得不好,否则由于I/O限制,这很可能会很慢,而正确的索引又可以减轻I/O限制。您还可以将函数重写为可以加快速度的视图。您使用的是哪种DBMS?函数的作用是什么?如果您试图“并行”运行一个写得不好的查询,它只会变得更慢。数据库服务器已经使用多线程来实现高吞吐量和处理juge表。检查查询的执行计划,确保有正确的索引,查找表或索引扫描,并在需要的地方添加索引。基本上,该函数从3个不同的数据库获取数据。这就是为什么我计划“并行”运行它,而且不可能更改其他数据库上的索引。不同的数据库是什么意思?如果它们位于不同的服务器上,则查询已在每个服务器上并行运行。如果它们在同一台服务器上,那么表是否在同一个数据库上几乎没有区别。同样,这个函数做什么?为什么要花这么长时间?如果你发布函数的代码而不是寻找欺骗数据库的方法,你会得到更好的答案