首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 秒級刪除百萬重複資料:唯一索引 + 臨時表法

     編輯:關於SqlServer

傳統游標法痛點

逐列比對刪除,百萬筆資料需執行數小時,且易發生鎖衝突。

四步驟極速去重法

1. 建立同結構臨時表

CREATE TABLE Products_temp (
    ProductID INT,
    ProductName NVARCHAR(40),
    Unit CHAR(2),
    UnitPrice MONEY
)

2. 加上唯一索引並設定 IGNORE_DUP_KEY

企業管理器 → 管理索引 → 新增 → 勾選「唯一」與「忽略重複鍵」。或 T-SQL:

CREATE UNIQUE INDEX UX_Products_temp_Key
ON Products_temp (ProductName, Unit, UnitPrice)
WITH (IGNORE_DUP_KEY = ON)

關鍵:索引欄位決定何謂「重複」,務必包含業務主鍵組合。

3. 複製資料,自動略過重複

INSERT INTO Products_temp SELECT * FROM Products

訊息:「已忽略重複的鍵。」臨時表現無重複列。

4. 替換原表

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

效能優勢

  • 純集合操作,無游標迴圈。
  • 百萬筆資料通常秒級完成。
  • 安全:原表資料先備份或交易包裹。

遷移至新版 SQL Server

SQL Server 2008+ 可用 MERGE 或 ROW_NUMBER() 窗口函數單陳述式完成:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ProductName, Unit, UnitPrice ORDER BY ProductID) AS rn
    FROM Products
)
DELETE FROM cte WHERE rn > 1
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved