Sql-Server

刪除設計不佳的表上的數百萬行

  • August 7, 2021

我已經通過使用此查詢在我繼承的表上辨識出數百萬個重複的行:

SELECT COUNT(*) AS NumRecords, AccessID, LEFT(SQLTEXT, 5000)
FROM Table
WHERE AccessID=5012
GROUP BY AccessID, LEFT(SQLTEXT, 5000)
HAVING COUNT(*)>1;

在此處輸入圖像描述

我可以在表上使用的唯一索引是 AccessRequestID 欄位 - SQLText 欄位是 VARCHAR(MAX),這裡有超過 1 億條記錄,因為有一個 varchar(MAX) 列,所以表是巨大的,需要永遠做任何事情和。如何將該 Select 語句轉換為刪除以刪除重複的記錄?我試圖弄清楚如何使用 Partition Rownum 編寫 CTE,但我對此沒有信心。我的想法是將它放在一個以 AccessID 1 開始的循環中,然後遞增 1 直到表的末尾(只有 5012 個唯一的 accessID)因為我將通過 NC 索引過濾位置,希望它會更快.

也許您可以嘗試將有效行插入新表,然後用新表替換舊表。

引用自:https://dba.stackexchange.com/questions/297729