Sql server 查阅“;“不匹配”;vs Query“;不在「;
我目前正在寻找使用SSIS 2010优化ETL流程的方法 不幸的是,我不知道什么时候/什么是使用这两种方法的最佳方式 我应该使用查找数据转换并将流定向到不匹配,还是应该使用带有not in子句的select语句,然后将其直接插入到目标 使用不匹配的Sql server 查阅“;“不匹配”;vs Query“;不在「;,sql-server,tsql,optimization,ssis,Sql Server,Tsql,Optimization,Ssis,我目前正在寻找使用SSIS 2010优化ETL流程的方法 不幸的是,我不知道什么时候/什么是使用这两种方法的最佳方式 我应该使用查找数据转换并将流定向到不匹配,还是应该使用带有not in子句的select语句,然后将其直接插入到目标 使用不匹配的 使用查询时不在 毫无疑问,后一种方法肯定快得多。SSIS中的任何操作都是非常昂贵的操作,如果直接通过query/SP在SQL中完成,那么这些操作将非常昂贵。 这里有一个例子可以解释这一点 通过删除任何 不必要的列和正确配置数据类型。任何 减少
使用查询时
不在
毫无疑问,后一种方法肯定快得多。SSIS中的任何操作都是非常昂贵的操作,如果直接通过query/SP在SQL中完成,那么这些操作将非常昂贵。 这里有一个例子可以解释这一点 通过删除任何 不必要的列和正确配置数据类型。任何 减少源数据集大小的机会 在操作开始之前,保存内存资源 缓冲区中的数据越少,通常性能就越好,但在这种情况下,完全跳过查找转换可以节省很多时间 还有一篇文章来自于says 减少行数。使用关系源时,请使用 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')
如果您遇到性能问题,SSI查找就是杀手。对于正确索引的大型记录集,使用NOT EXISTS的INSERT语句要快很多数量级