[英]Optimise SQL query with Case and operations in the select statement
Is there a way to optimise the query below. 有没有一种方法可以优化下面的查询。
It currently takes around 2 minutes to run 目前大约需要2分钟才能运行
I'm using MS SQL. 我正在使用MS SQL。 The Records_Table has nearly 9 million records. Records_Table有近900万条记录。 Date field is stored in 30 minute intervals and there are 60 different types of groups 日期字段以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]
Note that I need a full week of data, so I've set the condition as date BETWEEN @Date AND @Date + 6 请注意,我需要整整一周的数据,因此将条件设置为@Date AND @Date + 6之间的日期
Any help will be appreciated. 任何帮助将不胜感激。
Thanks 谢谢
尝试根据Date对表进行分区,因为据我所知,您的条件主要基于Date,并且您可以简单地在Date上创建索引,但是由于有900万行,因此我更喜欢分区。
我建议在(Date,Group)上建立一个索引,以便针对相关日期范围优化日期,并针对限定符对分组进行分组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.