我一直在开发一些存储过程,并且我一直在重复基于其他一些列派生列的部分代码。因此,我没有将这段代码从一个存储过程复制到另一个存储过程,而是考虑使用一个函数来获取输入列并生成输出列。
基本上,功能如下: SELECT columnA, columnB, columnC, myFunction(columnA, columnB) as columnD FROM myTable
如我们所见,这个函数将把a列和b列作为输入,然后返回d列。
然而,根据一些研究,在使用这样的udf(user-defined)函数时,它似乎存在一些性能问题。是真的吗?处理这种情况最好的方法是什么?
谢谢你们。
1条答案
按热度按时间4jb9z9bj1#
标量函数和多语句表值用户定义函数会导致性能问题,因为它们会隐式地将基于集合的操作转换为基于游标的操作。
但是,内联表值用户定义函数不会遇到此问题。他们跑得很快。
区别在于如何声明函数,以及其中的代码是什么样子。一个多语句函数执行它在tin上所说的操作-它允许您有多个语句。这样地:
内联表值函数不返回在函数内部填充的命名表。它返回select语句:
内联表值函数可以“内联”到外部select语句中,方式与视图大致相同。当然,区别在于udf可以接受参数,而视图不能。
你也必须用不同的方法。使用交叉应用:
如果不清楚-是的,在您的示例中,您只需要返回一个“标量”值,但这只是一个表值函数,返回一列和一行。因此,与其编写标量函数,不如编写一个执行相同任务的内联表值函数,然后
cross apply
是的。