简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM