我需要執行非常大(300M記錄)和廣泛TABLE1
的每日更新。更新的源數據位於另一個表UTABLE
中,即TABLE1
行的10%-25%,但較窄。這兩個表都有record_id
作爲主鍵。SQL Server中非常大的表的更新或合併
目前,我使用下面的方法重建TABLE1
:
<!-- language: sql -->
1) SELECT (required columns) INTO TMP_TABLE1
FROM TABLE1 T join UTABLE U on T.record_id=U.record_id
2) DROP TABLE TABLE1
3) sp_rename 'TMP_TABLE1', 'TABLE1'
但是這需要我的服務器(的RAM爲SQL Server 60GB)在將近40分鐘。我想實現50%的性能提升 - 我可以嘗試其他選擇嗎?
MERGE
和UPDATE
- 類似下面的代碼更快只有一個非常小的UTABLE
表的工作 - 在全尺寸,一切都只是掛起:<!-- language: SQL --> MERGE TABLE1 as target USING UTABLE as source ON target.record_id = source.record_id WHEN MATCHED THEN UPDATE SET Target.columns=source.columns
聽說我可以執行批MERGE通過使用ROWCOUNT - 但我不認爲它可以足夠快的300M行表。
任何SQL查詢提示,可以幫助嗎?
期間重建索引的額外工作您可以發佈查詢計劃嗎? – 2011-05-16 08:54:04
嗨@chris,查詢計劃很簡單:** 1 **表掃描TABLE1,** 2 **表掃描UTABLE,** 3 HASH JOIN,** 4 MERGE。第一步和最後一步佔用了90%的時間。不過,我已經理解如何解決我的問題 - 請看我自己的答案。 – 2011-05-17 09:59:55