2013-05-10 40 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插入事实表。