Sql 比较数据库中两大数据集的正确/最快方法

Sql 比较数据库中两大数据集的正确/最快方法,sql,database,compare,Sql,Database,Compare,我想比较两大组数据(两个表),每个表包含大约10000000条记录:id和其他属性的散列 如果左右两侧的id相同,但散列不同,我需要比较每个属性以查看哪个属性发生了更改。 实现这一目标的最佳方式是什么 我已经试过了,我正在寻找可能更快的东西 以下查询将为哈希不同的每个id都有一行,并且只包含不同的列(其他所有内容都为NULL) 选择一个id ,NULLIF(a.col1,b.col1)t1_col1 ,NULLIF(b.col1,a.col1)t2_col1 ,NULLIF(a.col2,b.c


我想比较两大组数据(两个表),每个表包含大约10000000条记录:
id
和其他属性的散列

如果左右两侧的
id
相同,但散列不同,我需要比较每个属性以查看哪个属性发生了更改。
实现这一目标的最佳方式是什么


我已经试过了,我正在寻找可能更快的东西

以下查询将为哈希不同的每个
id
都有一行,并且只包含不同的列(其他所有内容都为NULL)

选择一个id
,NULLIF(a.col1,b.col1)t1_col1
,NULLIF(b.col1,a.col1)t2_col1
,NULLIF(a.col2,b.col2)t1_col2
,NULLIF(b.col2,a.col2)t2_col2
[…]
从表1 a内部连接表2 b
在a.id=b.id上
a.散列b.散列

在(id、哈希)上建立索引将加快查询速度。

如果使用SQL Server,编写SQL Server集成服务(SSIS)包可能会获得最佳性能。我没有深入研究过它,但如果
DiffKit
在db中执行检查(即,它只是自动写入语句),在一般情况下,你不可能做得更好。你可以自己写一份声明;你自己试过什么?了解更多有关RDBMS、表和数据集的信息(例如,
id
的重复次数)也会有所帮助。当您说每个表包含“其他属性的散列”时,您的意思是该值存储为列吗?组合(id、哈希)是否在至少一个表中建立索引?是的,它存储为单独的列。这两个表中的ID列上都有索引,但我可以创建另一个索引。谢谢,我将看看它的速度有多快:)这种方法可以做到这一点,但其中一列是对另一个表的引用。。。我得想办法解决它。非常感谢!
SELECT a.id
    , NULLIF(a.col1,b.col1) t1_col1
    , NULLIF(b.col1,a.col1) t2_col1
    , NULLIF(a.col2,b.col2) t1_col2
    , NULLIF(b.col2,a.col2) t2_col2
    […]
FROM table1 a INNER JOIN table2 b
ON a.id = b.id
AND a.hash <> b.hash