在ssis中优化查找任务

时间:2015-04-06 13:02:17

标签: sql-server oracle ssis lookup

我对这种疑问有疑问。我正在将ETL从Access迁移到SSIS。一个查询涉及使用Oracle数据库中的表进行内部联接:

SELECT 
SQL_TABLE.COLUMN1,
SQL_TABLE.COLUMN2,
ORACLE_TABLE.COLUMN5,
ORACLE_TABLE.COLUMN6
FROM 
SQL_TABLE INNER JOIN ORACLE_TABLE ON
SQL_TABLE.ID_PPAL = ORACLE_TABLE.IDENTIF
WHERE
(((ORACLE_TABLE.COLUMN6) Is Not Null));

问题是,Oracle表有超过1800万个寄存器,而sql表的记录少于300个。因此,内部连接应该提供2500条记录。

首先我尝试使用合并连接任务,如图所示,但由于表的特性,这根本不高效,但是在寻找可能的情况,有人建议我使用查找任务,但是这只会给我一条记录,因为它对我来说每场比赛都有一个记录,这对我来说没用,我不会失去任何记录。

enter image description here

我想知道是否有另一种方法来执行此查询,因为我无法相信在这方面访问会比SSIS更有效。

2 个答案:

答案 0 :(得分:1)

根据我的经验,SQL Server不会优化涉及Oracle的查询。我找到的最快的方法是1)使用Oracle驱动程序从SSIS访问数据。 2)使用快速加载(使用表锁定)将Oracle表(如果适用,具有where条件)加载到SQL Server工作表中。 3)在表中创建聚簇索引。 4)加入。如果要重用该包,则需要截断工作表并将索引作为包的前两个步骤删除。

答案 1 :(得分:0)

您应该检查任何过滤器或尝试在Oracle数据库中进行连接,从而泄漏一点。如果结果不正确,请尝试使用变量来存储数据并创建脚本。

这可以为您服务:

http://www.bidn.com/blogs/ShawnHarrison/ssis/4579/looping-through-variable-values-with-a-foreach-loop-container