这通常显着提高性能,但需要您将标量函数更改为内联表值函数。
UPDATE
a
SET
SomeField = b.SomeField
FROM
TableA AS a
CROSS APPLY
dbo.oneInlineTableValuedFunction(@CurrencyFrom, e.Currency) AS ITVF
INNER JOIN
TableB b
ON b.Link = a.Link
WHERE
b.CostMin <= @Cost * ITVF.exchangeRate
AND b.CostMax >= @Cost * ITVF.exchangeRate
尽管表值函数返回表,但您可以选择只返回一行和一个字段。然后您将它有效地用作标量函数 - 但是,您将获得 SQL Server 如何优化上述查询的所有好处......
- 如果 TVF 是内联的(而不是多语句)
- TVF 被扩展了进入查询
- 结果是性能明显优于标量函数
内联表值函数示例:
CREATE FUNCTION dbo.oneInlineTableValuedFunction (
@currencyFrom VARCHAR(32),
@currencyTo VARCHAR(32)
)
RETURNS TABLE
AS
RETURN (
SELECT
exchangeRate
FROM
dbo.someTable
WHERE
currencyFrom = @currencyFrom
AND currencyTo = @currencyTo
)
故意微不足道
关于此的一个示例帖子: 标量函数内联和性能
如果你在网上搜索,INLINE CROSS APPLY SCALAR FUNCTION PERFORMANCE
我相信你会得到更多。