我有一張超過10億行的表格。我想基本上有這張表的副本,但是我需要通過較小的塊添加記錄並從最新的記錄開始。我希望有最短的時間進行總操作(創建表,插入行,創建索引)。如何優化插入行和創建索引?
源和目標具有3個指標:
1 =羣集(column1的ASC,列2 ASC)
2 =非唯一非聚集(列2 ASC,欄3 ASC)
3 =非唯一非羣集(Column4 ASC,Column5 ASC)
我想插入由Column1 DESC排序的我的列。在90%的情況下,Column1是唯一的,大約9%的情況下少於5個重複。 Column1 + Column2始終是唯一的。如果它可以幫助優化,我可以在其他列上添加排序,但是我必須先通過Column1 DESC開始排序。
所以我想知道最快的過程應該是什麼。請注意,我的插入將以大塊(大概100萬)完成。我目前的計劃是這樣的:
1:不帶指數
2創建表:由大塊,ORDER BY列1 DESC插入數據。每個塊包含在BEGIN-COMMIT/ROLLBACK TRANSACTION塊中。這是在一個定期的SQL作業調用的存儲過程中。
3:在每個X塊之後,收縮數據庫日誌。這是爲了防止磁盤空間被炸燬。
4:創建索引#1
5:創建索引#2
6:創建索引#3
7:收縮日誌
參見:TSql, building indexes before or after data input
十億行??? – i486
作爲SQL Server中重複過程的一部分收縮通常不是一個好主意。如果您正在使用'FULL'恢復模式並在頻繁的時間間隔內(例如,使用按計劃運行的代理程序作業)進行事務日誌備份,則您將防止日誌變得過大*,而不會*縮小。 – alroc
@alroc很高興知道,謝謝。我忘了提及我計劃將插入作爲SQL作業調用的存儲過程來運行。基於這一點以及你所說的話,我不應該在X插入後收縮日誌,我最終應該只做一次。 –