我对这类查询产生了怀疑。我正在将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更有效。
发布于 2015-04-06 21:14:12
根据我的经验,SQL Server不会优化涉及Oracle的查询。我发现最快的方法是1)使用Oracle驱动程序访问SSIS中的数据。2)使用快速加载(带表锁)将Oracle表(如果适用,带有where条件)加载到SQL Server工作表中。3)创建表的聚集索引。4)进行连接。如果要重用该包,则需要截断工作表并删除索引,作为包的前两个步骤。
发布于 2015-07-01 23:09:50
您应该检查任何筛选器或尝试在Oracle数据库中进行连接,因此会有一些泄漏。如果结果不正确,请尝试使用变量存储数据并创建脚本。
这可以为您提供以下服务:
https://stackoverflow.com/questions/29471857
复制相似问题