1

我有一个包含 2012 年至今的销售数据的视图,我需要编写只显示当年销售额(2013 年)的查询。

这是我在第一阶段尝试的

SELECT * 
FROM [Sales_Data] 
WHERE invoiceDate  between '2013-01-01' and '2013-12-31' 

此查询需要 2 秒来加载数据,但我更改查询以获取不需要我手动更新的数据,这是我在网上找到的:

select * from [Sales_Data]  
where datepart(yyyy,invoiceDate) =datepart(yyyy,getdate()) 
and datepart(yyyy,invoiceDate) =datepart(yyyy,getdate())

因此,此查询需要更长的时间才能显示数据(9 秒)。请让我知道是否有更好的查询可以在更短的时间内定义和获取数据?

4

1 回答 1

2

您的第二个查询需要 sql server 为您查询的每一行执行计算。

以下查询更接近您的原始选择语句。

select * from [Sales_data]
where invoiceDate between DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) --- First Day of current year
and DATEADD(MILLISECOND, -3,DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)) --- Last Day of current year

根据您查询的视图的情况,您还可以从包含 invoiceDate 字段的索引中受益。

您可能需要检查运行查询时生成的执行计划,以了解查询运行时幕后发生的情况。

于 2013-01-21T05:40:49.167 回答