在SQL Server 2016(v13)中工作。
我正在两个表(tblA和tblB)之间执行左联接,其中联接条件包括多个用户定义的标量函数(UDF)。 UDF从tblA和tblB中获取参数。我不知道是否或如何优化查询。
(减少的)查询大致如下:
pip
例如,dbo.udf1和dbo.udf2类似于:
conda
UDF自然要复杂一些,但都写为单个 select *
from tblA A
left join tblB B
on 1 = dbo.udf1(A.field1, B.anotherField1)
and 1 = dbo.udf2(A.field2, B.anotherField2)
(即,都是INLINE函数)。
我找不到使用表值函数将其重新整理成表格的方法。我假设必须有一种方法可以改善此查询,但是不确定是否存在,或者如何开始。
答案 0 :(得分:1)
我找不到一种使用表值函数将其重新整理成表单的方法。
这是可能的。请注意,此逻辑要求对A的所有行与B的所有行进行二次方比较。这一定很慢。
所以重写如下:
SELECT ...
FROM A
CROSS JOIN B
CROSS APPLY dbo.MyPredicate(A.x, B.y) p
WHERE p.SomeValue = 1
CROSS JOIN
是二次比较。联接之后,您可以使用两个表中的值来执行联接条件。