使用select语句中的Case和operation优化SQL查询

时间:2013-10-07 08:19:02

标签: sql sql-server

有没有办法优化下面的查询。

目前大约需要2分钟才能运行

我正在使用MS SQL。 Records_Table有近900万条记录。日期字段以30分钟为间隔存储,有60种不同类型的组

declare @date datetime
set @date = convert(datetime,'16/sep/2013',104)

SELECT 
[Group],
CASE WHEN (SUM(A) + SUM(B)) = 0 THEN 0 ELSE 
CAST(SUM(C) AS decimal(18, 2)) / (SUM(A) + SUM(B)) * 100 END AS Calculation 
FROM   Records_Table
WHERE date BETWEEN @Date AND @Date + 6
GROUP BY [Group]

请注意,我需要一整周的数据,所以我将条件设置为@Date和@Date + 6之间的日期

任何帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:0)

尝试根据日期对您的表进行分区,因为我了解您的条件主要基于日期,您可以在日期创建索引,但由于您有900万行,我更喜欢分区。

答案 1 :(得分:0)

我建议在(日期,组)上建立一个索引,以便针对相关日期范围优化日期,并为聚合的限定符分组。