2011-01-06 68 views
1

我有大約200萬行左右的數據,每行都有一個人工PK和兩個Id字段(如:PK,ID1,ID2)。我對ID1 + ID2有一個唯一的約束(和索引)。在SQL Server 2008中維護「集合」的最有效方法?

我得到兩種更新,每種更新都有不同的ID1。所有新數據的

  1. 100-1000行(ID1爲新)
  2. 100-1000的行很大程度上,但不一定完全重疊的數據(ID1已經存在,也許新ID1 + ID2對)

什麼是最有效的方法來維護這個'集'?以下是選項,我看到他們:

  1. 刪除所有行與ID1,插入來自組新的數據ID1 + ID2的所有新行(亞克西)
  2. 查詢所有現有行,只插入新行
  3. 插入所有新行,忽略引發唯一約束衝突

有什麼想法插入?

+0

的SQL Server版本? – 2011-01-06 14:54:26

回答

1

並非所有列出的解決方案在功能上都是相同的,因此,如果不瞭解您想要或需要完成的任何更多知識,就很難說哪種方案最合適。

  1. 您可能會丟失想要或需要保留的數據。
  2. 根據你提到的表格模式,這應該是合理的。
  3. 只有分別執行每個INSERT時,這纔會起作用。

我建議[2]根據可用的信息。

+0

是的,當然是有權衡的 - 基本上所有的都是可以接受的,我只是想盡量減少我的痛苦:做這個工作的成本有點小。謝謝! – 2011-01-06 14:59:21

3

如果你使用SQL Server 2008(或2008 R2),你可以看看MERGE,是這樣的:

MERGE INTO MyTable mt 
USING NewRows nr 
    ON mt.ID1 = nr.ID1 and mt.ID2 = nr.ID2 
WHEN NOT MATCHED THEN 
    INSERT (ID1,ID2,<more columns>) VALUES (nr.ID1,nr.ID2,<other columns>); 
+0

太棒了,如果我使用存儲過程,我會考慮這一點。 – 2011-01-06 15:24:16

相關問題