0

我正在尝试加载事实表。我要加入 7 张不同的桌子。当我从该连接中选择 count(1) 时,执行需要 25 分钟并返回 988368728 条记录。最重要的是,我使用 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 包来分治,但我不知道如何打破它。

我需要帮助来解决这个时间杀手。

4

2 回答 2

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 个表连接在一起。

于 2013-05-10T17:53:30.383 回答
0

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

于 2013-05-10T20:34:38.500 回答