Sql-Server
在大表上創建聚集索引的無痛方法?
因此,我們有一個客戶網站抱怨性能嚴重下降。我看了一眼,很明顯問題是因為Somebody Else (grrrr) 設計了一個表,其中包含大約 2000 萬條記錄而沒有聚集索引。
現在我想在該表上創建一個聚集索引 - 但在我的測試環境中,我的
create index
命令已經執行了一個小時,但仍未完成。客戶站點是一個 24/7 全天候工作的車間,在我創建索引時無法承受一個小時的停機時間。是否有一些創建索引的蠻力方法可以快速完成工作,或者以某種聰明的方式完成,不會在伺服器繁忙時完全破壞伺服器的性能?
我們使用的是 SQL Server 企業版。
- 如果您的 sql server 是 Enterprise+ 版本並且表沒有任何 BLOB 欄位 -
CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)
- 如果沒有 - 除了創建具有相同架構的表並明智地將數據傳輸到它之外,沒有任何辦法,包括所有 INSERT/UPDATE/DELETE 操作(例如,使用觸發器),然後準確地刪除舊表並重命名新的與舊的同名 - 缺點是:速度慢,給伺服器和儲存增加了額外的負載
不確定您的客戶使用的是什麼版本的 SQL Server。在企業中,您可以使用 (ONLINE = ON) 建構索引,因此該表在創建索引之前可用。