从不存在的源 table 到目标 table 的大量数据
Huge amount of data from a source table where not exists to destination table
我遇到了一些问题 select 将数据从源 table 传输到目标 table 以找出来自源 table 的哪些数据尚未完全集成到目的地 table.
源 table 是另一个 DBMS,在 SQL 服务器中,我们使用链接服务器访问源 table 的 DBMS,集成非常简单从源的列到目标的列(没有其他计算)
当我执行这样的 select 语句时
SELECT A.*
FROM [ORCLE_DB]..GROUP.TABLEA AS A
WHERE NOT EXISTS (SELECT 1 FROM TABLEA as B WHERE A.ID = B.ID)
花了很长时间select数据,而且数据量还蛮大的,大约2000万行数据。
是否有任何其他方法可以 select 这些行,可以让 SELECT
更高效、更快地执行?非常感谢,任何想法和建议将不胜感激
您可能会遇到 'N+1' 的分布式查询。启发式方法在惩罚网络速度方面有些神秘。您可以使用 SQL Profiler 验证这一点。
如果是这样,您可以通过以下方式解决:
- 创建本地临时文件 table 以容纳来自远程链接服务器 table(s) 的所有必需数据 [并对临时文件 table 列应用任何不同的排序规则]
- 将远程数据插入本地临时文件table
- 加入本地 table 与临时 table。
如果 TABLEA
明显小于 [ORACLE_DB]..GOUP.TABLEA
,您可以从引用您的 SqlServer TABLEA
的 oracle 创建一个链接服务器,然后只查询一个视图或执行一个存储过程在 oracle 中允许在大量数据而不是在 SqlServer 上执行昂贵的过滤。
我遇到了一些问题 select 将数据从源 table 传输到目标 table 以找出来自源 table 的哪些数据尚未完全集成到目的地 table.
源 table 是另一个 DBMS,在 SQL 服务器中,我们使用链接服务器访问源 table 的 DBMS,集成非常简单从源的列到目标的列(没有其他计算)
当我执行这样的 select 语句时
SELECT A.*
FROM [ORCLE_DB]..GROUP.TABLEA AS A
WHERE NOT EXISTS (SELECT 1 FROM TABLEA as B WHERE A.ID = B.ID)
花了很长时间select数据,而且数据量还蛮大的,大约2000万行数据。
是否有任何其他方法可以 select 这些行,可以让 SELECT
更高效、更快地执行?非常感谢,任何想法和建议将不胜感激
您可能会遇到 'N+1' 的分布式查询。启发式方法在惩罚网络速度方面有些神秘。您可以使用 SQL Profiler 验证这一点。
如果是这样,您可以通过以下方式解决:
- 创建本地临时文件 table 以容纳来自远程链接服务器 table(s) 的所有必需数据 [并对临时文件 table 列应用任何不同的排序规则]
- 将远程数据插入本地临时文件table
- 加入本地 table 与临时 table。
如果 TABLEA
明显小于 [ORACLE_DB]..GOUP.TABLEA
,您可以从引用您的 SqlServer TABLEA
的 oracle 创建一个链接服务器,然后只查询一个视图或执行一个存储过程在 oracle 中允许在大量数据而不是在 SqlServer 上执行昂贵的过滤。