比较2个大表(SQL Server)

时间:2016-11-15 00:49:17

标签: c# .net sql-server performance comparison

我有2个大桌子(每个大约100-150k行)。

这些表的结构是相同的。每个表中的实体ID也相同。

我需要一种非常快速的方法来比较这些表并回答以下问题:

  1. 哪一行的字段与另一个表的行不同?
  2. 第一个表中存在哪些ID,第二个表中不存在?
  3. 第二个表中存在哪些ID,第一个表中不存在?
  4. 谢谢!

    编辑:我需要使用C#或可能的存储过程进行此比较(然后通过c#选择结果)

3 个答案:

答案 0 :(得分:2)

如果您有两个表// View twice as wide as the device screen let masterView = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.frame.width * 2, height: 100)) let swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: #selector(ThisViewController.swipeLeft)) let swipeRightGesture = UISwipeGestureRecognizer(target: self, action: #selector(ThisViewController.swipeRight)) swipeLeftGesture.direction = UISwipeGestureRecognizerDirection.left swipeRightGesture.direction = UISwipeGestureRecognizerDirection.right masterView.addGestureRecognizer(swipeLeftGesture) masterView.addGestureRecognizer(swipeRightGesture) self.addSubview(masterView) func swipeLeft() { // Moves masterView to the left equal to that of the width of the screen (or half of masterView's total width) let moveLeftFrame = CGRect(x: (masterView.frame.width / 2) * -1, y: masterView.frame.minY, width: masterView.frame.width, height: masterView.frame.height) UIView.animateKeyframes(withDuration: 0.5, delay: 0, options: .calculationModeCubic, animations: { UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.4, animations: { masterView.frame = moveLeftFrame }) }, completion: { (true) in }) } func swipeRight() { // Moves masterView back to original location let moveRightFrame = CGRect(x: 0, y: masterView.frame.minY, width: masterView.frame.width, height: masterView.frame.height) UIView.animateKeyframes(withDuration: 0.5, delay: 0, options: .calculationModeCubic, animations: { UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.4, animations: { masterView.frame = moveRightFrame }) }, completion: { (true) in }) } Table1并且它们具有相同的结构和名为Table2的主键,则可以使用此SQL:

ID

如果您要比较并找到一列或另一列不同的行,那就有点棘手了。您可以编写SQL来自己检查每个列,但是向两个表添加临时CHECKSUM列并比较这些列可能更简单。如果校验和不同,则一列或多列不同。

答案 1 :(得分:1)

SQL Data Compare是一个很好的工具。此外,Microsoft Visual Studio SQL Server数据工具还具有数据比较功能。

答案 2 :(得分:0)

我发现以下方法在比较大数据集时表现非常好。

http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx

基本上UNION ALL的两个数据源然后聚合它们,只返回在另一个表中没有相同匹配行的行。

With unionCTE As (
    Select 'TableA' As TableName, col1, col2
      From TableA
    Union All
    Select 'TableB', col1, col2
      From TableB)
Select Max(TableName), col1, col2
  From unionCTE
  Group By col1, col2
  Having Count(*) = 1
  Order By col1, col2, TableName;

这将在单个结果集中显示结果,如果有任何行具有相同的键但值不同,则行将高于另一个,以便您可以轻松地比较表之间已更改的值。 / p>

如果需要,可以很容易地将其放入存储过程中。