Sql-Server
刪除設計不佳的表上的數百萬行
我已經通過使用此查詢在我繼承的表上辨識出數百萬個重複的行:
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 索引過濾位置,希望它會更快.
也許您可以嘗試將有效行插入新表,然後用新表替換舊表。