sqlserver普通表分區

如何將一個普通錶轉換成一個分區表呢?說到底,只要將該表創建一個聚集索引,並在聚集索引上使用分區方案即可。

我們可以看出,這個表擁有一般普通表的特性——有主鍵,同時這個主鍵還是聚集索引。前面說過,分區表是以某個字段爲分區條件,所以,除了這個字段以外的其他字段,是不能創建聚集索引的。因此,要想將普通錶轉換成分區表,就必須要先刪除聚集索引,然後再創建一個新的聚集索引,在該聚集索引中使用分區方案。
可惜的是,在SQL Server中,如果一個字段既是主鍵又是聚集索引時,並不能僅僅刪除聚集索引。因此,我們只能將整個主鍵刪除,然後重新創建一個主鍵,只是在創建主鍵時,不將其設爲聚集索引,如以下代碼所示:
--刪掉主鍵
ALTER TABLE Sale DROP constraint PK_Sale
--創建主鍵,但不設爲聚集索引
ALTER TABLE Sale ADD CONSTRAINT PK_Sale PRIMARY KEY NONCLUSTERED
(
[ID] ASC
) ON [PRIMARY]
在重新非聚集主鍵之後,就可以爲表創建一個新的聚集索引,並且在這個聚集索引中使用分區方案,如以下代碼所示:
--創建一個新的聚集索引,在該聚集索引中使用分區方案
CREATE CLUSTERED INDEX CT_Sale ON Sale([SaleTime])
ON partschSale([SaleTime])
爲表創建了一個使用分區方案的聚集索引之後,該表就變成了一個分區表,查看其屬性,如下圖所示。

我們可以再一次使用以下代碼來看看每個分區表中的記錄數。
--統計所有分區表中的記錄總數
select $PARTITION.partfunSale(SaleTime) as 分區編號,count(id) as 記錄數 from Sale group by $PARTITION.partfunSale(SaleTime)
以上代碼的運行結果如下所示,說明在將普通錶轉換成分區表之後,數據不但沒有丟失,而且還自動地放在了它應在的分區表中了。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章