| 閱文時長 | | 0.6分鍾 | 字數統計 | | 963.2字符 |
| 主要內容 | | 1、引言&背景 2、Delete刪除法 3、提取回寫刪除法 4、聲明與參考資料 | ||
| 『MSSQL·大數據量歷史數據清理的思路』 | |||
| 編寫人 | | SCscHero | 編寫時間 | | 2021/7/15 PM10:45 |
| 文章類型 | | 系列 | 完成度 | | 已完成 |
| 座右銘 | 每一個偉大的事業,都有一個微不足道的開始。 | ||
一、引言&背景 完成度:100%
a) 應對問題
面對上億級別的數據量的刪除/遷移時,刪除時間往往非常長,是否有更高效的做法?
b) 應對場景
大數據量遷移/刪除時(如海量歷史數據刪除),需要高效的清理手段。
c) 解決原理&方法
- Delete刪除法:適用於刪除小數據量的數據(個人認為適用於刪除數據量在200萬以下)。
- 有效數據提取,回寫刪除法:(個人認為適用於刪除數據量遠大於保留數據量,比例在2:8的情況可以考慮。如總量1億的數據表,有9000萬無效數據,1000萬有效數據。)
二、Delete刪除法 完成度:100%
Delete刪除語句,T-SQL基礎了。簡單帶過。
--基本語法
DELETE [DBName].[TableName] WHERE [Column]='XXXX'
三、提取回寫刪除法 完成度:100%
a) 主要思路
- 先寫好查詢語句,將准備提取的有效數據提取到另一張表。
- TRUNCATE原表,在GUI界面刪除主鍵約束及自增屬性。
- 將有效數據插回到原表中,設定好原來的主鍵約束及自增屬性。
b) 常見Q&A
- 為什么要在GUI界面刪除主鍵約束及自增屬性。
目前由於更改自增屬性,MSSQL底層處理邏輯使用T-SQL實現較為復雜,因此使用GUI界面更改的方式。如遇到"阻止保存要求重新創建表的更改配置"等窗口,點擊傳送門。 - 在有效數據插回到原表后,設置主鍵及自增屬性,為什么那么慢?
因為MSSQL對數據表結構更改底層的處理是新建一個臨時表,設定為自增主鍵,把數據插入再插回這一系列操作,所以理論上數據量越大,速度則越慢。如遇超時問題,點擊傳送門。 - 對於自增列問題使用,設置為"允許顯式插入自增列"是否可行?
在數據回寫的時候也嘗試過此問題,但即使開啟了允許顯式插入自增列,還是要報需要開啟...。因此最簡單的方式是關閉自增屬性。
SET IDENTITY_INSERT [tablename] ON
四、聲明與參考資料 完成度:100%
原創博文,未經許可請勿轉載。
如有幫助,歡迎點贊、收藏、關注。如有問題,請評論留言!如需與博主聯系的,直接博客私信SCscHero即可。
