2013-05-10 43 views
0

我想加載一個事實表。我加入了7個不同的表格。當我從該連接中選擇計數(1)時,需要25分鐘才能執行並返回988368728條記錄。最重要的是,我一次又一次地使用同一組表。使用SSIS選擇大量的記錄

實施例:

Select set1.minVal, t2b, t2.Key1, T3.Key2... t7.g From t1, t2,...,t7 
left outer join 
(
    Select 
     Min(t1a) minVal, Max(t2b) maxVal, t2.Key1, T3.Key2 From t1, t2,...,t7 
    group by t2.Key1, K3.Key2(Key Columns) 
)set1 
on t2.Key1 = set1.Key1 
and t3.Key2 = set1.Key2 
and t2b = maxVal 

當我執行它在1小時後失敗上述查詢由於在足夠的存儲器用於TEMPDB。我需要在SSSI包中使用這個查詢來加載一個事實表。我可以選擇通過不同的方式編寫查詢來實現這一點。其中一個是我可以使用SP來分割和征服結果,我可以使用SSIS Package來分割和征服,但是,我不知道如何分解它。

我需要幫助來整理這個時間殺手。

回答

4

您的疑問:

Select set1.minVal, t2b, t2.Key1, T3.Key2... t7.g From t1, t2,...,t7 

和子查詢

Min(t1a) minVal, Max(t2b) maxVal, t2.Key1, T3.Key2 From t1, t2,...,t7 

是7(大概)表,其中在t1每一行與每一行中t2匹配做一個笛卡爾積,與t3等各行相匹配

不知道你想要什麼,很難給出答案,如何我懷疑你需要7個不同的子查詢,或者你需要以某種方式加入7個表。

+0

我確定我在團隊之前已經有98密爾,在團隊之後減少到35密爾。我想要一種分解和征服查詢的方法。無論是在存儲過程還是SSIS包。 – HRK 2013-05-10 18:02:03

+0

我的觀點是你是否想要進行笛卡爾連接,或者在表格之間是否存在用於減少#或記錄的關鍵列?另外,您只使用7個表格中的4個的值 – 2013-05-10 20:32:12

+2

換句話說......您是怎麼想出這個查詢的,因爲它看起來不正確 - 它創建了一個笛卡爾連接,它總是會導致一個TEMPDB如果您使用大型表格,則會出錯。您需要分析您的查詢並提出正確的查詢。你的幾乎肯定是不正確的。 – 2013-05-11 07:47:57

0

通過數據流任務將每個表加載到目標數據庫的臨時區域,然後使用執行SQL任務執行連接並使用TSQL插入事實表。