我使用以下内容返回上周财政周数
SELECT (
SELECT
CA.FISCALWEEK
FROM
EUUKSQL01.DASHBOARD.DBO.CALENDAR CA
WHERE
CONVERT(DATE,GETDATE()) = CONVERT(DATE,CA.FULLDATE) ) - 1
如果我在查询中使用了很多,我将宣读&将其设置为@LW等。
我也把它创建为FUNCTION,
使用一种方法比另一种方法有什么好处吗?
答案 0 :(得分:1)
UDF(用户定义的函数)可能会对查询速度产生负面影响。如果尚未将MAXDOP(最大并行度)设置为1,则使用UDF进行查询将阻止并行性。
您可以在解释计划中看到它并尝试哪种解决方案更快。
另一方面,在UDF中重用代码和更容易的调试很好。
如果你想同时拥有两者,你可以编写自己的包含UDF逻辑的CLR。
我做的测试:
CREATE FUNCTION [dbo].[GetLW]()
RETURNS datetime
AS
BEGIN
RETURN CONVERT(DATE,GETDATE())
END
GO
SELECT *
FROM [TGR].[dbo].[LargeTable]
WHERE BookingDate = [dbo].[GetLW]()
GO
DECLARE @LW datetime = CONVERT(DATE,GETDATE())
SELECT *
FROM [TGR].[dbo].[LargeTable]
WHERE BookingDate = @LW
GO
解释计划:
因此,如果您处于DWH / BI环境中,那么变量可能是更好的解决方案。
此致 TGR
答案 1 :(得分:0)
使用GETDATE()会产生非确定性结果。我建议在变量中使用结果。除了通过唯一调用获得性能之外,您还将受到保护,以免出现不一致的结果。想象一下,如果您在两个税周之间的午夜有一系列GETDATE调用会发生什么,其中一些在之前和之后有一些。