[英]Best way to handle updates on a table
我正在尋找使用SSIS更新表的更好的方法。 具體來說,我想優化表的更新(大約10個表使用相同的邏輯)。
邏輯是
使用上述步驟,這需要一些時間來填充TMP_Tbl。 因此,我計划將邏輯更改為delete-insert,但要注意以下幾點 : 在SQL中,UPDATE是否總是比DELETE + INSERT快? 這將是痛苦的秘方。
鑒於:
任何人都知道最好的使用方法是什么,似乎需要刪除使用物理臨時表,這正常嗎?
使用SSIS,您通常會BULK INSERT
,而不是INSERT
。 因此,如果您不介意DELETE
,則重新插入行的性能通常應優於UPDATE
。
考慮到這一點,更快的方法將是:
[Execute SQL Task]
刪除所有需要更新的記錄。 (根據您的數據庫設計和查詢,某些索引可能會有所幫助)。
[Data Flow Task]
快速加載(使用OLE DB目標,數據訪問模式:數據表-快速加載),將更新的記錄和新記錄都從源導入MyTbl。 這里不需要臨時表。
如果您不能/不想DELETE
記錄,那么您當前的方法也可以。 您只需要修復該UPDATE
查詢的性能即可(添加索引應該會有所幫助)。 每條更新的記錄2-3分鍾太長了。 但是,如果要花2-3分鍾來更新數百萬條記錄,則可以接受。
向表中添加正確的非聚集索引不應導致“更新時間更多”。 會有一些開銷,但是如果它可以幫助您的UPDATE
而不是掃描大表,那么它通常是值得的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.