如何加快日期的SQL查询速度

时间:2017-01-03 18:15:18

标签: sql sql-server

我有一个查询,我使用了包含大约一百万行的两个表的内部联接。我试图运行查询,因此它只获取上个月的数据。但是,使用getDate()函数需要很长时间。但是当我以这种格式输入日期时,2016-12-01'和' 2017-01-01' - 它真的很快如何修改查询以使其运行得更快?我读到我可能需要创建一个非聚集索引,但我还不是很好。

tablename_20161205, tablename_20161206, tablename_20161219

1 个答案:

答案 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()。因此,我们最好将其移动到局部变量中。