我在生產服務器中有一個包含3.5億行和大約25GB大小的表。它有一個單一的羣集標識索引。 針對此表的查詢需要一些缺少索引以獲得更好的性能。 我需要刪除不必要的數據(約2億行),然後創建兩個非聚集索引。 不過,我有一些顧慮:SQL Server刪除大表中的行並創建索引
- 我需要避免增加日誌太多
- 保持數據庫停機時間儘可能低。
- 保持其餘數據中的身份(主鍵)相同。
我想聽聽您的意見,以獲得最佳解決方案。
我在生產服務器中有一個包含3.5億行和大約25GB大小的表。它有一個單一的羣集標識索引。 針對此表的查詢需要一些缺少索引以獲得更好的性能。 我需要刪除不必要的數據(約2億行),然後創建兩個非聚集索引。 不過,我有一些顧慮:SQL Server刪除大表中的行並創建索引
我想聽聽您的意見,以獲得最佳解決方案。
以下是你可能會怎麼做這樣的方針:
然後你有兩個選擇。如果這是您的Universe中唯一的表格:
如果有其它表(例如外鍵關係):
根據您的用戶需求,T的一個他以上的變化可能會爲你的問題。
請注意,還有其他更多內部密集型技術。例如,創建一個複製的數據庫,一旦這個數據庫正常工作,你就有兩個系統,並且可以一次完成一個清理工作(像這樣的方法對於接近100%正常運行時間要求的系統來說是首選方法)。或者創建一個恰到好處的單獨表並交換表空間。
嗯,是的,這似乎是一個很好的方法,我唯一需要考慮的是複製recort以保留到一個新表中的時間(大約1億行/ 9GB),然後創建索引。我知道我不應該但是,如果我在創建索引後複製數據會更快嗎? – nunopacheco
@nunopacheco,如果您的數據庫位於SIMPLE或BULK_LOGGED恢復模型中,那麼當您指定「TABLOCK」提示時,只有聚簇索引的INSERT ... SELECT被最小化記錄。請參閱https://technet.microsoft.com/en-us/library/dd425070%28v=sql.100%29.aspx。之後創建非聚集索引。 –
@nunopacheco。 。 。通常複製數據然後創建索引會更快。 –
您使用的SQL Server版本和版本。這可以作爲企業版的在線操作完成。 –
對不起,我錯過了:SQL Server 2008r2標準版 – nunopacheco