我有一个查询,我正在使用来自大约一百万行的 2 个表的内部联接。我正在尝试运行查询,因此它只获取上个月的数据。但是,使用 getDate() 函数需要很长时间。但是,当我以“2016-12-01”和“2017-01-01”这种格式输入日期时 - 它真的很快。如何修改查询以使其运行得更快?我读到我可能必须创建一个非聚集索引,但我还不太擅长这些。
select
custKey,
sum(salesAmt) as Sales,
sum(returnAmt) as Credit,
(sum(salesAmt) - sum(returnAmt)) as CONNET
from
[SpotFireStaging].[dbo].[tsoSalesAnalysis]
inner join
[SpotFireStaging].[dbo].OOGPLensDesc as o on tsoSalesAnalysis.ItemKey = O.ItemKey
where
PostDate between --DATEADD(MONTH, DATEDIFF(MONTH,0, GETDATE())-1,0 )
--AND DATEADD(MS, -3,DATEADD(MM, DATEDIFF(M,-1, GETDATE()) -1, 0))
'2016-12-01' and '2017-01-01'
group by
custkey
Run Code Online (Sandbox Code Playgroud)
declare @startDate DateTime = DATEADD(MONTH, DATEDIFF(MONTH,0, GETDATE())-1,0 )
declare @endDate DateTime = DATEADD(MS, -3,DATEADD(MM, DATEDIFF(M,-1, GETDATE()) -1, 0))
select
custKey,
sum(salesAmt) as Sales,
sum(returnAmt) as Credit,
(sum(salesAmt) - sum(returnAmt)) as CONNET
from
[SpotFireStaging].[dbo].[tsoSalesAnalysis]
inner join
[SpotFireStaging].[dbo].OOGPLensDesc as o on tsoSalesAnalysis.ItemKey = O.ItemKey
where
PostDate between @startDate AND @endDate
group by
custkey
Run Code Online (Sandbox Code Playgroud)
另一种选择,在此处查看所选答案:
GetDate()为每一行单独计算,所以我们必须相信DateDiff()和DateAdd()。所以我们最好把它移到一个局部变量中。