我正在尝试加载事实表。我正在加入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包来分而治之,但我不知道如何打破它。
我需要帮助来理清这个时间杀手。
答案 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插入事实表。