【发布时间】:2020-07-13 10:03:42
【问题描述】:
我一直在开发一些存储过程,并且我一直在重复部分代码,这些代码基于其他一些列派生列。因此,我没有将这段代码从一个存储过程复制到另一个存储过程,而是考虑使用一个函数来获取输入列并生成输出列。
基本上,函数如下:
SELECT columnA, columnB, columnC, myFunction(columnA, columnB) as columnD FROM myTable
我们可以看到,这个函数将A列和B列作为输入,然后返回D列。
但是,根据一些研究,使用这样的 UDF(用户定义)函数时似乎存在一些性能问题。真的吗?处理这种情况的最佳方法是什么?
谢谢你们。
【问题讨论】:
-
信息如此之少,无法给出建议。这将取决于你真正需要什么。即使是最小的函数也会自然地产生一些性能问题(即:upper(myColumnA)),但值得对其进行优化以获得可能以纳秒为单位的时间是值得商榷的。如果您非常担心,请将其留给前端。
-
我最初在下面发布了我的答案,但没有明确说明用内联表值函数替换 scalar 用户定义函数(形式为
create function foo() returns int as ...以提高性能。同样的论点仍然适用不过,所以我编辑了答案以使其更加明确。您可以使用内联 TVF 返回“标量”值,交叉应用它,而不会遇到在选择中使用真正的标量 UDF 的性能问题。跨度>
标签: sql sql-server user-defined-functions