使用SSIS选择大量记录

时间:2013-05-10 17:41:18

标签: sql-server ssis

我正在尝试加载事实表。我正在加入7个不同的表格。当我从该连接中选择count(1)时,执行并返回988368728条记录需要25分钟。最重要的是,我使用group by并再次使用相同的表集合。

示例:

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

当我执行上述查询时,由于TEMPDB有足够的内存,它在1小时后失败了。我需要在SSSI包中使用此查询来加载事实表。我可以选择编写查询来通过不同的方式实现这一目标。其中一个是我可以使用SP来划分和征服结果,我可以使用SSIS包来分而治之,但我不知道如何打破它。

我需要帮助来理清这个时间杀手。

2 个答案:

答案 0 :(得分: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个表连接在一起。

答案 1 :(得分:0)

通过数据流任务将每个表加载到目标数据库的临时区域,然后使用执行SQL任务执行连接并使用TSQL插入事实表。