我有一个视图,其中包含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秒)。 如果有更好的查询可以在更短的时间内定义和获取数据,请告诉我?
答案 0 :(得分:2)
您的第二个查询需要sql server对您要查询的每一行执行计算。
以下查询更接近您原始的select语句。
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字段的索引。
您可能需要检查运行查询时生成的执行计划,以查看查询运行时幕后发生的情况。