2013-10-07 51 views
0

有沒有一種方法可以優化下面的查詢。使用Case和select語句中的操作優化SQL查詢

目前,它大約需要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

任何幫助將不勝感激。

感謝

+0

你的桌子上有什麼索引? – GarethD

+0

我跑了下面的查詢,我沒有得到任何結果(因此,沒有):select * from sys.indexes where object_id =(從sys.objects選擇object_id where name ='Records_Table') – Selrac

+1

我建議索引然後選擇日期,然後將所需的列作爲非關鍵列添加。例如CREATE INDEX IX_RecordsTable_Date ON Records_Table(Date)INCLUDE([Group],A,B,C)' – GarethD

回答

0

嘗試分區您的表基於日期,因爲我的理解主要是基於日期的條件,你可以簡單地創建日期指標,但由於900萬行,你有我喜歡的分區。

+0

我需要管理員訪問權限來創建分區嗎?有什麼辦法呢? – Selrac

+0

您必須具有該表上的ALTER OBJECT權限 – VahiD

0

我會建議一個關於(日期,組)的索引,以便日期針對有問題的日期範圍進行優化,並且通過集合的限定詞對該組進行優化。