查找"不匹配" vs Query" NOT IN"

时间:2017-04-20 07:38:18

标签: sql-server tsql optimization ssis

我目前正在寻找使用SSIS 2010优化ETL流程的方法。

不幸的是,我对何时/什么是使用这两者的最佳方式感到困惑。

我应该使用查找数据转换并指示流不匹配,还是应该使用带有not in子句的select语句,然后将其直接插入目标?

使用不匹配  
 


 

使用NOT IN

查询

1 个答案:

答案 0 :(得分:2)

毫无疑问,后一种方法肯定要快得多。 SSIS中的任何内容都是非常昂贵的操作,当通过查询/ SP直接在SQL中完成时。 这是一个MSDN link,它解释了这个

  

删除任何内容,尽可能减少估计的行大小   不必要的列和正确配置数据类型。任何   您必须减少源数据集大小的机会   在操作开始之前节省内存资源。

缓冲区中的数据越少意味着,通常性能越多,但在这种情况下,通过完全跳过查找转换可以节省很多。

同样来自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')