用户定义的函数 - 它们编码实践不好吗?

ind*_*dra 5 sql performance coding-style sql-server-2008 sql-execution-plan

我正在编写具有相当复杂的数据集,大量连接的报告.为了简化问题,因为我基本上是一个面向对象的开发者,我一直在写小(通常是标量)函数来做到这一点可以通过参加到一个子查询所要做的工作.这种事:

SELECT 
    x.Name, x.userId, 
    ... [more columns and joins]
    dbo.CountOrders(x.userId)
FROM Customers x 
WHERE ...
Run Code Online (Sandbox Code Playgroud)

这是好习惯吗?马虎?慢?我应该编写常规的 T-SQL来做这些事吗?

Mar*_*ith 3

我几乎永远不会有一个进行数据访问的标量 UDF。

标量 UDF 无法由优化器扩展,需要进行 RBAR 评估。众所周知,这不是一个好主意。

一些示例阅读。

  • 值得注意的是,第二个链接解决了这个确切的问题,并提供了一个可能的替代方案([内联表值 UDF](http://msdn.microsoft.com/en-us/library/ms189294.aspx))。 (2认同)