我对这种疑问有疑问。我正在将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条记录。
首先我尝试使用合并连接任务,如图所示,但由于表的特性,这根本不高效,但是在寻找可能的情况,有人建议我使用查找任务,但是这只会给我一条记录,因为它对我来说每场比赛都有一个记录,这对我来说没用,我不会失去任何记录。
我想知道是否有另一种方法来执行此查询,因为我无法相信在这方面访问会比SSIS更有效。
答案 0 :(得分:1)
根据我的经验,SQL Server不会优化涉及Oracle的查询。我找到的最快的方法是1)使用Oracle驱动程序从SSIS访问数据。 2)使用快速加载(使用表锁定)将Oracle表(如果适用,具有where条件)加载到SQL Server工作表中。 3)在表中创建聚簇索引。 4)加入。如果要重用该包,则需要截断工作表并将索引作为包的前两个步骤删除。
答案 1 :(得分:0)
您应该检查任何过滤器或尝试在Oracle数据库中进行连接,从而泄漏一点。如果结果不正确,请尝试使用变量来存储数据并创建脚本。
这可以为您服务: