0

以下のクエリを最適化する方法はありますか。

現在、実行に約 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]

1 週間分のデータが必要なので、条件を日付 BETWEEN @Date AND @Date + 6 として設定したことに注意してください。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

0

(Date,Group) のインデックスを提案するので、日付は問題の日付範囲に対して最適化され、Group by 修飾子は集計用に最適化されます。

于 2013-10-07T09:04:11.523 に答える
0

日付に基づいてテーブルをパーティション分割してみてください。条件は主に日付に基づいていることを理解しているため、日付にインデックスを作成するだけで済みますが、900 万行あるため、パーティション分割を好みます。

于 2013-10-07T08:29:31.150 に答える