在Join条件下使用标量函数

时间:2018-07-08 04:13:13

标签: sql-server performance join user-defined-functions

我正在与一个表联接以检索值,但是为了联接,我需要做一些逻辑,因为两个表都没有通用的值。因此,逻辑是对两个输入进行前1个运算并从公用表中获取特定值。我打算将逻辑放入标量函数中,然后在连接条件中调用它。

我有一个像这样的简单连接

LEFT JOIN <IndexTable> Tbl1 ON Tbl1.PrimaryKey = MainTbl.PrimaryKey

我打算使用用户定义的标量函数将其更改为类似的内容

LEFT JOIN <IndexTable> Tbl1 
ON dbo.fnGetCommonID(Tbl1.PrimaryKey) = dbo.fnGetCommonID(MainTbl.PrimaryKey)

就性能而言,以这种方式使用它是好事,还是有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

如果可能,在查询中进行计算,也许使用OUTER APPLY而不是LEFT JOIN:

OUTER APPLY (
    SELECT TOP 1 <at least one field, also values from MainTbl may be used>
    FROM <the set of data you need>
    WHERE <boolean, also values from MainTbl may be used>
    ORDER BY <make the top record the one you want>
) AS Tbl1