Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 查阅“;“不匹配”;vs Query“;不在「;_Sql Server_Tsql_Optimization_Ssis - Fatal编程技术网

Sql server 查阅“;“不匹配”;vs Query“;不在「;

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 2010优化ETL流程的方法

不幸的是,我不知道什么时候/什么是使用这两种方法的最佳方式

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

使用不匹配的



使用查询时
不在


毫无疑问,后一种方法肯定快得多。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语句要快很多数量级