我目前正在寻找使用SSIS 2010优化ETL流程的方法。
不幸的是,我对何时/什么是使用这两者的最佳方式感到困惑。
我应该使用查找数据转换并指示流不匹配,还是应该使用带有not in子句的select语句,然后将其直接插入目标?
使用不匹配
使用NOT IN
答案 0 :(得分:2)
删除任何内容,尽可能减少估计的行大小 不必要的列和正确配置数据类型。任何 您必须减少源数据集大小的机会 在操作开始之前节省内存资源。
缓冲区中的数据越少意味着,通常性能越多,但在这种情况下,通过完全跳过查找转换可以节省很多。
同样来自SQLMag的文章
减少行数。使用关系源时,请使用 一个WHERE子句,用于将数据过滤到您需要的行而不是 依靠管道中的转换来消除行。什么时候 使用大型平面文件,尽可能分解源文件 并使用顺序数据流任务处理生成的文件 最小化I / O争用。
您还可以修改查询,以便不为每一行运行内部查询,如下所示
/* Source Query with NOT IN clause */
SELECT ColumnValues
FROM
Table1 A (NOLOCK) LEFT JOIN Table2 B (NOLOCK) ON A.Col1 =B.Col1
LEFT JOIN
Table3 C (NOLOCK) ON c.Col1 =A.Col1
WHERE C.Col1 is NULL AND CRD NOT IN ('ALO', 'PM')