我有一个查询,我使用了包含大约一百万行的两个表的内部联接。我试图运行查询,因此它只获取上个月的数据。但是,使用getDate()函数需要很长时间。但是当我以这种格式输入日期时,2016-12-01'和' 2017-01-01' - 它真的很快如何修改查询以使其运行得更快?我读到我可能需要创建一个非聚集索引,但我还不是很好。
tablename_20161205, tablename_20161206, tablename_20161219
答案 0 :(得分:4)
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
另一种选择,请在此处查看所选答案:
When using GETDATE() in many places, is it better to use a variable?
GetDate()
是针对每一行单独计算的,所以我们必须相信DateDiff()
和DateAdd()
。因此,我们最好将其移动到局部变量中。