【问题标题】:Proper / fastest way to compare two big sets of data in database比较数据库中两大数据集的正确/最快方法
【发布时间】:2013-10-29 12:29:32
【问题描述】:


我想比较 2 个大数据集(2 个表),每个包含大约 10,000,000 条记录:id 和其他属性的哈希。

如果左侧和右侧的id相同,但hash不同,我需要比较每个属性,看看哪个属性发生了变化。
实现这一目标的最佳方法是什么?

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

【问题讨论】:

  • 如果您使用的是 SQL Server,您可能会通过编写 SQL Server Integration Services (SSIS) 包获得最佳性能。
  • 我还没有深入研究它,但如果DiffKit 在数据库中执行它的检查,(即它只是自动写入语句),你不太可能做太多在普通情况下更好。你也许可以自己写一个声明;你自己试过什么?了解更多关于您的 RDBMS、表和数据集(例如,id 的重复次数)也会有所帮助。
  • 当您说每个表包含“其他属性的哈希”时,您的意思是该值存储为列吗?组合(id、哈希)是否在至少一个表中编入索引?
  • 是的,它存储为单独的列。两个表中的 ID 列都有索引,但我可以创建另一个索引。

标签: sql database compare


【解决方案1】:

以下查询将为每个 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,hash) 上的索引会加快查询速度。

【讨论】:

  • 谢谢,我看看能多快:)
  • 这种方法可以解决问题,但其中一列是对另一个表的引用......我必须以某种方式解决它。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多