使用UDF产生的列的位置

在我的select中,我有一个由UDF产生的列。同样的列应该是where子句的一部分。除了两次调用UDF以外,还有其他选项。我有大约15K行基于用户搜索返回,因为这个我想调用UDF,因为它会降低性能,并提供有关如何实现此目的的任何建议。想要类似这样的东西。使用UDF产生的列的位置

SELECT EMP 

, SAL

, Location

, dbo.GetCompValue

(EMP, SAL) AS CompValue

FROM tblEmpSal

WHERE CompValue > 5000;

回答:

你可以使用CROSS/OUTER APPLY

SELECT EMP, SAL,Location, s.CompValue 

From tblEmpSal

OUTER APPLY (SELECT dbo.GetCompValue(EMP,SAL) AS CompValue) s

WHERE s.CompValue > 5000

回答:

UDF是始终猪当谈到性能,您可以更改此功能的逻辑,使其成为一个In-Line table valued function,性能会更好,并且在一些它也会利用缓存的执行计划。

SELELCT EMP, SAL,Location, CompValue 

FROM (

SELECT EMP, SAL,Location, dbo.GetCompValue(EMP,SAL) AS CompValue

From tblEmpSal

)A

WHERE A.CompValue > 5000

回答:

如果UDF的参数是从一个表,一个选项(取决于表是如何使用和UDF的性质),将是一个持久化计算列添加到表中,然后使用该列在你的SQL语句中,而不是反复调用UDF。这个列也可能被索引,虽然这是否有任何好处取决于你的查询做了什么。

以上是 使用UDF产生的列的位置 的全部内容, 来源链接: utcz.com/qa/261321.html

回到顶部