使用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