首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ssis中优化查找任务

问在ssis中优化查找任务
EN

Stack Overflow用户
提问于 2015-04-06 21:02:17
回答 2查看 328关注 0票数 0

我对这类查询产生了怀疑。我正在将ETL从Access迁移到SSIS。一个查询涉及与Oracle数据库中的表的内连接:

代码语言:javascript
复制
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更有效。

EN

回答 2

Stack Overflow用户

发布于 2015-04-06 21:14:12

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

票数 1
EN

Stack Overflow用户

发布于 2015-07-01 23:09:50

您应该检查任何筛选器或尝试在Oracle数据库中进行连接,因此会有一些泄漏。如果结果不正确,请尝试使用变量存储数据并创建脚本。

这可以为您提供以下服务:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29471857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档