快速更新1.2 億筆記錄的技巧
嘗試更新包含1.2 億筆記錄的表時遇到效能問題是一個常見的挑戰。使用 UPDATE 語句的傳統方法可能非常緩慢,需要數小時甚至數天才能完成。
不要嘗試直接更新,請考慮使用 SELECT 語句填入 第二個 表。這種方法提供了顯著的性能優勢,如下所示:
簡單案例:
-
對於沒有聚集索引的表以及在低DML 期間活動:
- 執行:SELECT *, new_col = 1 INTO clone.BaseTable FROM dbo.BaseTable
- 在新表上重新建立索引、限制等
- 使用 ALTER SCHEMA 切換新舊表 ... TRANSFER
- 刪除舊表table
非簡單情況:
- 非簡單情況:
-
- 在不同模式下重新使用建立具有相同名稱的BaseTable (clone.table) BaseTable)包含聚集索引、識別列、計算列和新的INT列
- 排除
- 觸發器、外鍵約束、非聚集索引和檢查約束
- 用少量行測試插入
- 截斷克隆表並執行完整克隆表並執行完整插入
重新建立所有非聚集約束、索引和觸發器
將dbo.BaseTable移動到備份架構並將.BaseTable 複製到 dbo 架構透過避免直接更新並利用 SELECT 語句的強大功能,您可以大幅減少更新時間,使得高效更新海量表成為可能。
以上是如何快速更新資料庫表中1.2億筆記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!