2017-02-27 10 views
-1

私は何千万ものデータを持っています。JC_ItemDailySalesParentテーブル。グループ化すると5分以上がロードされますが、完了しませんでした。SQL Serverのクエリに最適なインデックスは何ですか?

影響を受けた合計行は、私が時間のインデックスを作成し

select pp.ItemLookupCode, 
      StoreID, 
      sum(Qty) TotalQuantity, 
      sum(ExtendedPrice) ExtendedPrice, 
      sum(ExtendedCost) ExtendedCost 
      into #temp_tt 
FROM [HQMatajer].[dbo].[JC_ItemDailySalesParent] pp 
WHERE (Time>=CONVERT(datetime,'2015-01-01 00:00:00.000',102)) and 
     (Time<=CONVERT(datetime,'2015-01-31 00:00:00.000',102)) 
group by pp.ItemLookupCode,StoreID 
    order by pp.ItemLookupCode 

(グループ化なし)50万記録することもあります。

+0

私は、あなたが変数にカットオフ日付を取り込むとクエリが改善されると思うので、 'convert'関数をすべての行に使う必要はありません。また、別のテーブルに挿入している場合は、なぜ 'order by'ですか? – HoneyBadger

+0

実行計画を見てください。 –

+0

@HoneyBadger私に例を教えてもらえますか? –

答えて

0

すでにTimeにインデックスを持っている場合は、次の操作を実行すると、クエリでのパフォーマンス向上の可能性があります

declare @DateStart datetime = CONVERT(datetime,'2015-01-01 00:00:00.000',102) 
,  @DateEnd datetime = CONVERT(datetime,'2015-01-31 00:00:00.000',102) 

select pp.ItemLookupCode, 
      StoreID, 
      sum(Qty) TotalQuantity, 
      sum(ExtendedPrice) ExtendedPrice, 
      sum(ExtendedCost) ExtendedCost 
      into #temp_tt 
FROM [HQMatajer].[dbo].[JC_ItemDailySalesParent] pp 
WHERE Time>[email protected] and 
     Time<[email protected] 
group by pp.ItemLookupCode 
,  StoreID 
order by pp.ItemLookupCode 
0

をこのテーブルのPKは何ですか?

はいデータ型を指定する必要があります。また、このテーブルに既に他のインデックスがある場合は必要です。 上記とは別のクエリです。

i)が時間通りにNCIを作成する(数量、ExtendedPriceが、ExtendedCost)

ii)はItemLookupCodeに1 NCIの作成などが、StoreIDは、(数量、ExtendedPriceが、ExtendedCost)

まず私を行う)のみを作成しますItemLookupCodeに1つのNCI、StoreID を追加し、diffを使用して実際のクエリプランを何度も確認してください。パラメータ。

インデックスが使用されていない場合は、i)とii)を完全に実装し、クエリプランを確認します。

これはどのようなクエリを微調整するかと思います。

関連する問題