萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 健康知識

SQL Server 快速刪除重複記錄:唯一索引法

資料表出現重複列導致查詢統計不準,傳統游標逐列比對效能極差(百萬列需數小時)。利用唯一索引忽略重複鍵特性,僅需四步驟、幾秒鐘即可完成去重,適用任意資料量。

四步驟去重法

步驟 1:建立相同結構暫存表

CREATE TABLE Products_temp (
    ProductID int,
    ProductName nvarchar(40),
    Unit char(2),
    UnitPrice money
)

步驟 2:建立唯一索引並設定 IGNORE_DUP_KEY

企業管理器 → 暫存表 → 右鍵【所有工作】→【管理索引】→【新增】→ 勾選 「忽略重複鍵」(IGNORE_DUP_KEY = ON),選擇作為唯一鍵的欄位組合(如 ProductName + Unit)。

步驟 3:複製資料,自動過濾重複

INSERT INTO Products_temp SELECT * FROM Products

訊息顯示 「已忽略重複的鍵」,暫存表僅保留唯一列。

步驟 4:置換原表資料

DELETE FROM Products
INSERT INTO Products SELECT * FROM Products_temp
DROP TABLE Products_temp

關鍵決策:唯一索引欄位選擇

  • 去重定義取決於哪幾個欄位組合定義「重複」。
  • 範例中以 ProductName + Unit 為唯一鍵,若實際業務以 ProductID 為主鍵,則不應建立此索引,否則會誤刪正常資料。
  • 操作前必須確認業務主鍵與去重鍵定義一致,必要時先備份原表。

優缺點比較

方法速度程式碼複雜度風險適用場景
游標逐列極慢 (O(n²))高長時間鎖表極小資料量、複雜去重邏輯
唯一索引法極快 (批次操作)低 (4 陳述式)需正確定義唯一鍵大量資料、標準去重需求
ROW_NUMBER() 窗口函數 (SQL 2005+)快中較低現代版本、需保留特定列(如最新)

進階技巧

  • 若需保留特定重複列(如最新修改日期),可先排序插入:INSERT INTO temp SELECT * FROM Products ORDER BY ModifiedDate DESC,配合唯一索引保留首筆。
  • 大型資料表建議分批處理,避免交易記錄暴增:SET ROWCOUNT 10000 迴圈處理(SQL 2000)或 TOP (n)(SQL 2005+)。
  • 操作期間鎖定原表,建議維護時段執行。

唯一索引忽略重複鍵技巧,是 SQL Server 2000 時代處理大量資料去重的經典高效解法,理解其原理有助於遷移至新版本時選擇最佳策略。

copyright © 萬盛學電腦網 all rights reserved