私は次のクエリを持っています:
SELECT fpa.scenario_id,
fpa.facility_id,
cge.CostGroupId result_total_id,
mp_surrogate_id,
CAST(SUM(fpa.raw_amount * cge.CostSign) AS DECIMAL(25, 13))
result_total_amount
INTO ADM_FactProfitTotalAmount_1
FROM #tempAmount fpa
JOIN ResultTest cge ON cge.CostId = fpa.process_id
WHERE fpa.scenario_id = 1
GROUP BY fpa.scenario_id, fpa.facility_id, cge.CostGroupId, fpa.mp_surrogate_id
- 私には2
#tempAmount
億2000万行あります。 - 私に
ResultTest
は150行あります。
私はインデックスを持っています#tempAmount
:
CREATE NONCLUSTERED INDEX #tempAmount_process_id
ON #tempAmount(scenario_id, facility_id, mp_surrogate_id, process_id )
実行には約1時間かかります。それを最適化することは可能ですか?
編集:
ResultTest列CostIdにインデックスを作成し、他のインデックスとクエリを少し変更しました
CREATE CLUSTERED INDEX #tempFactAmount_index
ON #tempAmount (process_id ,facility_id, mp_surrogate_id )
SELECT ISNULL(CAST(1 as BIGINT), 0) scenario_id,
fpa.facility_id,
cge.CostGroupId result_total_id,
fpa.mp_surrogate_id,
CAST(SUM(fpa.raw_amount * cge.CostSign) AS DECIMAL(25, 13)) result_total_amount
INTO ADM_FactProfitTotalAmount_1
FROM ResultTest cge
JOIN #tempAmount fpa ON cge.CostId = fpa.process_id
GROUP BY fpa.facility_id, fpa.mp_surrogate_id, cge.CostGroupId
実行計画:
41%がADM_FactProfitTotalAmount_1に挿入
51%ハッシュマッチ集計
2%ハッシュマッチ内部参加