簡體   English   中英

處理表更新的最佳方法

[英]Best way to handle updates on a table

我正在尋找使用SSIS更新表的更好的方法。 具體來說,我想優化表的更新(大約10個表使用相同的邏輯)。

邏輯是

  1. 從暫存中選擇源數據,然后將其插入DW中的物理臨時表(即TMP_Tbl)
  2. 將所有由customerId列匹配的數據從TMP_Tbl更新為MyTbl。
  3. 將所有不存在的customerId列從TMP_Tbl1插入MyTbl。

使用上述步驟,這需要一些時間來填充TMP_Tbl。 因此,我計划將邏輯更改為delete-insert,但要注意以下幾點在SQL中,UPDATE是否總是比DELETE + INSERT快? 這將是痛苦的秘方。

鑒於:

  • 表上未使用索引/鍵
  • 有些表包含500萬行,有些表包含2k行
  • 每個表更新最多需要2-3分鍾,總共大約需要15至20分鍾
  • 這些更新我們在單獨的序列容器中同時運行

任何人都知道最好的使用方法是什么,似乎需要刪除使用物理臨時表,這正常嗎?

使用SSIS,您通常會BULK INSERT ,而不是INSERT 因此,如果您不介意DELETE ,則重新插入行的性能通常應優於UPDATE

考慮到這一點,更快的方法將是:

  1. [Execute SQL Task]刪除所有需要更新的記錄。 (根據您的數據庫設計和查詢,某些索引可能會有所幫助)。

  2. [Data Flow Task]快速加載(使用OLE DB目標,數據訪問模式:數據表-快速加載),將更新的記錄和新記錄都從源導入MyTbl。 這里不需要臨時表。

如果您不能/不想DELETE記錄,那么您當前的方法也可以。 您只需要修復該UPDATE查詢的性能即可(添加索引應該會有所幫助)。 每條更新的記錄2-3分鍾太長了。 但是,如果要花2-3分鍾來更新數百萬條記錄,則可以接受。

向表中添加正確的非聚集索引不應導致“更新時間更多”。 會有一些開銷,但是如果它可以幫助您的UPDATE而不是掃描大表,那么它通常是值得的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM