所以我有一個腳本:SSIS數據流性能緩慢VS選擇成
select *
into my_archive_05302013
from archive_A
where my_Date = '05/18/2013'
和:
insert into archive_B (ID,my_date,field_n)
select ID, my_Date,field_n from my_archive_05302013
其中field_n n爲約100個左右。換句話說,我正在加載的表中有100多列。
運行得非常快,查詢會插入大約200000條記錄。 my_date是在表中的非聚集索引archive_A
現在,當我創建一個使用SSIS 2008需要小時完成
我在OLE DB源的以下數據流:
SELECT * FROM Archive_A
WHERE My_Date = (SELECT MAX(My_Date) from Archive_A)
和OLE DB目標:
數據訪問模式:「表或視圖 - 快速加載」 表名:archive_B 表鎖和檢查限制檢查
任何人都知道問題可能是什麼?
在此先感謝
首先,你沒有做同樣的事情。您的第一個查詢將在您的存檔表中的特定日期並寫入另一個表中。然後,你從這張小得多的表格中拉出3列到最終目的地。與您的SSIS方法相比,您可以抓取歸檔表中的每個字段,如果這些字段超過這3列,則必須讀取比所需更多的數據。您還必須計算歸檔表與固定時間點的最大日期。最後,第一個可能不需要考慮網絡延遲。 – billinkc
嗯,數據流應該擊敗SELECT INTO?您可以使用執行SQL任務來獲取MAX(My_date)並將其存儲在變量中,然後在數據流的OLE DB源中使用該變量。 (順便說一句,您的標題應該是「SSIS Data Flow ...」,而不是「SSIS Task Flow ...」。)這只是分隔子查詢。另一件事是檢查從源到目標的箭頭上的元數據。所有的100列都有正確的數據類型嗎?您還可以添加一個[Data Viewer](http://msdn.microsoft.com/zh-cn/library/ms140318.aspx),並隨着數據的流逝觀察數據。 – criticalfix
我以爲你在這兩種情況下都轉移了100多列,而你只是顯示了腳本的縮略版本。如果你只需要列的一個子集,那麼你肯定需要在SSIS出現之前告訴SSIS並且移動千兆字節... – criticalfix