2014-02-18 33 views
0

我有一個巨大的數據集在SQL Server(約32萬行),這是考慮到實現和源代碼如下返回巨大的數據集(3200萬)加載到表:需要使用SSIS

SELECT Idenitifier = ISNULL(mle.MIdeer, mle.Ider) + em.MemberId, 
     EffectiveDate = ISNULL(em.EffectiveDate, 
           (SELECT TOP 1 EffectiveDate 
           FROM c 
           WHERE SourceType = em.SourceType 
            AND GroupNumber = em.GroupNumber 
            AND ISNULL(GroupDivision, '') = 
             ISNULL(em.GroupDivision, ''))) 
FROM a em 
     JOIN b mle 
     ON mle.Identifier = em.GroupNumber + ISNULL('-' + em.GroupDivision, '') 

      -- Filter invalid legal entities 
      AND ISNULL(mle.Filter, 0) = 0 

     --- Gets a resultset of 531798 rows 

     CROSS JOIN -- this returns 63 rows , so 
     -- I am presuming 531798*63 rows here. 
     (SELECT * 
     FROM map 
     WHERE domaintype = 'MC')b; 

我需要使用SSIS將此數據集加載到表中。在1600萬行之後,當我給出select * from <<view>>時,我得到了sql server中的內存異常的system.out。如何使用SSIS在表格中加載此數據集,避免此異常。

還有哪些其他更好的方法可以有效地執行此查詢,因爲它需要超過30分鐘才能運行?

+0

的內存溢出異常,是,正在從SSMS報道,當你只是運行查詢? – billinkc

+0

以上查詢是否在SSIS中用作數據源?另外,爲什麼你需要使用SSIS? –

+3

鑑於你的錯誤信息來自SSMS而不是SSIS,我認爲你有一個沒有問題,儘管你upvotes。儘管該團隊確實對性能進行了調整,但SSIS團隊能夠在6年之久的硬件上在30分鐘內加載[1TB](http://technet.microsoft.com/zh-cn/library/dd537533(v = sql.100 )的.aspx)。 30M行不算什麼。 – billinkc

回答

0

我還是通過這個思維,但是你可能需要分開CROSS JOIN

;WITH cte AS (SELECT ISNULL(mle.MIdeer, mle.Ider) + em.MemberId AS Idenitifier 
         , ISNULL(em.EffectiveDate, 
           (SELECT TOP 1 
             EffectiveDate 
           FROM c 
           WHERE SourceType = em.SourceType 
             AND GroupNumber = em.GroupNumber 
             AND ISNULL(GroupDivision, '') = ISNULL(em.GroupDivision, 
                       '') 
           )) AS EffectiveDate 
       FROM a em 
       JOIN b mle ON mle.Identifier = em.GroupNumber + ISNULL('-'+ em.GroupDivision,'') 
          AND ISNULL(mle.Filter, 0) = 0) 
SELECT * 
FROM cte 
CROSS JOIN (SELECT * 
      FROM map 
      WHERE domaintype = 'MC') b; 
+0

這個查詢如何比我發佈的查詢更好,而不是代碼可管理性?你能否證明...... – user3277506

+0

@ user3277506在有限的測試中,這是在同一個查詢中交叉連接更快,我只有時間測試一點,只有很少的記錄是相同的,但是當我開始記錄計數時改變了查詢計劃並且表現更好。除此之外沒有什麼,它是否會給你相同的內存錯誤? –

+0

這次它做得更好,但是在加載了16百萬行之後,它拋出了內存錯誤。你認爲任何與在內存中渲染數據相關的東西,可能正在清理臨時文件夾或如此..解決? – user3277506