gpt4 book ai didi

sql - 为什么使用子查询调用UDF可以提高查询性能?

转载 作者:行者123 更新时间:2023-12-02 03:41:50 25 4
gpt4 key购买 nike

我最近意识到,通过在子查询中调用 UDF 比直接调用它们执行得更好,为什么会发生这种情况?

举个例子:

CREATE FUNCTION [CurrentYearStart]()
RETURNS DATETIME
AS
BEGIN
DECLARE @Date DATETIME;
SELECT top 1 @Date = StartPeriod
FROM SystemPeriods WITH (NOLOCK);
RETURN @Date;
END

ProviderServiceAreas 有 412585 行。

以下查询将在大约 50 秒内返回

SELECT   PayGroup, SystemType, MAX(EffDt) AS MaxEffDt
FROM CAT.ProviderServiceAreas
WHERE EffDt > CurrentYearStart()
GROUP BY Paygroup, SystemType

执行计划:https://www.brentozar.com/pastetheplan/?id=BJCom7vgm

以下查询大约1s返回

SELECT   PayGroup, SystemType, MAX(EffDt) AS MaxEffDt
FROM CAT.ProviderServiceAreas
WHERE EffDt > (SELECT CurrentYearStart())
GROUP BY Paygroup, SystemType

执行计划:https://www.brentozar.com/pastetheplan/?id=HkolVQDx7

最佳答案

我会选择:

SELECT PayGroup, SystemType, MAX(EffDt) AS MaxEffDt
FROM ServiceAreas CROSS JOIN
(SELECT StartPeriod() as sp) sp
WHERE EffDt > sp.sp
GROUP BY Paygroup, SystemType ;

显然,性能差异在于调用函数的次数。如果将函数调用放在 FROM 子句中,您将拥有更多控制权。

关于sql - 为什么使用子查询调用UDF可以提高查询性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50749652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com