我有以下查詢:優化長時間運行SQL Server查詢
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
- 在
#tempAmount
我有220個百萬行。 - 在
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%哈希匹配內部加入
你有一個指數'process_id'以及?從JOIN條件看,定義一個似乎是有益的。並且將'process_id'移動到第二個索引列也可能有所幫助。儘管沒有查詢計劃,但很難說明瓶頸在哪裏。 – Oded
關於優化選擇好的網絡直播:http://www.brentozar.com/archive/2012/10/back-index-basics-how-make-select-statements-faster-video/ – Oded
嘗試創建於#tempAmount聚集索引只是在scenario_id列上。 –