来自源表的大量数据不存在于目标表中

时间:2018-05-17 04:19:41

标签: sql sql-server select exists

我在从源表到目标表中选择数据时遇到一些麻烦,以找出源表中尚未完全集成到目标表的数据。

源表是另一个DBMS,在SQL Server中我们使用链接服务器来访问源表的DBMS,并且集成几乎只是从源到列的列到列(没有其他计算)

当我执行像这样的选择语句时

success: function(res){
   alert(data);
}

选择数据需要花费很长时间,而且数据量非常庞大,大约有2000万行数据。

有没有其他方法可以选择这些行,这可以让SELECT A.* FROM [ORCLE_DB]..GROUP.TABLEA AS A WHERE NOT EXISTS (SELECT 1 FROM TABLEA as B WHERE A.ID = B.ID) 执行更有效,更快速地执行?非常感谢,任何想法和建议都会非常感激

2 个答案:

答案 0 :(得分:1)

您可能会对分布式查询违反“N + 1'”。启发式方法在惩罚网络速度方面有些神秘。您可以使用SQL事件探查器验证这一点。

如果是这样,你可以通过以下方式解决:

  1. 创建本地临时表以容纳链接服务器远程表中的所有必需数据[并将任何不同的排序规则应用于临时表列]
  2. 将远程数据插入本地临时表
  3. 使用临时表加入本地表。

答案 1 :(得分:0)

如果TABLEA明显小于[ORACLE_DB]..GOUP.TABLEA,您可以从oracle创建一个引用您的SqlServer TABLEA的链接服务器,然后只查询一个视图或执行一个驻留在oracle中的存储过程允许在大量数据而不是SqlServer上执行昂贵的过滤。