我想比較兩個大的數據集(2個表),每個包含大約10,000,000個記錄:id
和其他屬性的散列。正確/最快的方法來比較數據庫中的兩個大數據集
如果id
在左側和右側是相同的,但哈希是不同的,我需要比較每個屬性,看看哪一個已經改變。
實現該目標的最佳方法是什麼?
我試過DiffKit,我正在尋找更快的東西。
我想比較兩個大的數據集(2個表),每個包含大約10,000,000個記錄:id
和其他屬性的散列。正確/最快的方法來比較數據庫中的兩個大數據集
如果id
在左側和右側是相同的,但哈希是不同的,我需要比較每個屬性,看看哪一個已經改變。
實現該目標的最佳方法是什麼?
我試過DiffKit,我正在尋找更快的東西。
下面的查詢將有一個排,每id
其中散列不同,僅包含不同的列(一切是NULL)
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
上(ID,散列)索引將加快查詢了一下。
如果您使用的是SQL Server,那麼通過編寫SQL Server Integration Services(SSIS)包可能會獲得最佳性能。 – criticalfix
我還沒有看清楚它,但是如果'DiffKit'正在執行其在-db中的檢查(即它只是自動寫入語句),那麼在常見情況下你不太可能做得更好。你可以自己寫一個陳述;你有什麼嘗試過自己?這也有助於瞭解更多關於RDBMS,表格和數據集的信息(比如,多少次'id')。 –
當你說每個表包含「其他屬性的散列」時,你的意思是這個值是以列的形式存儲的嗎?是否至少在一個表中索引了組合(id,hash)? –