這篇文章將為大家詳細(xì)講解有關(guān)SQL Server中如何將普通表轉(zhuǎn)換成分區(qū)表,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都創(chuàng)新互聯(lián)成立與2013年,公司以網(wǎng)站設(shè)計制作、網(wǎng)站制作、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶近千家,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計、獨特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。
今天我們來看看將普通表轉(zhuǎn)換為分區(qū)表。
正文
在設(shè)計數(shù)據(jù)庫時,經(jīng)常沒有考慮到表分區(qū)的問題,往往在數(shù)據(jù)表承重的負(fù)擔(dān)越來越重時,才會考慮到分區(qū)方式,這時,就涉及到如何將普通表轉(zhuǎn)換成分區(qū)表的問題了。
那么,如何將一個普通表轉(zhuǎn)換成一個分區(qū)表 呢?說到底,只要將該表創(chuàng)建一個聚集索引,并在聚集索引上使用分區(qū)方案即可。
不過,這回說起來簡單,做起來就復(fù)雜了一點。還是接著上面的例子,我們先使用以下SQL語句將原有的Sale表刪除。
--刪除原來的數(shù)據(jù)表
drop table Sale
然后使用以下SQL語句創(chuàng)建一個新的普通表,并在這個表里插入一些數(shù)據(jù)。
使用以上代碼創(chuàng)建的表是普通表,我們來看一下表的屬性,如下圖所示
在以上代碼中,我們可以看出,這個表擁有一般普通表的特性——有主鍵,同時這個主鍵還是聚集索引。前面說過,分區(qū)表是以某個字段為分區(qū)條件,所以,除了這個字段以外的其他字段,是不能創(chuàng)建聚集索引的。因此,要想將普通表轉(zhuǎn)換成分區(qū)表,就必須要先刪除聚集索引,然后再創(chuàng)建一個新的聚集索引,在該聚集索引中使用分區(qū)方案。
可惜的是,在SQL Server中,如果一個字段既是主鍵又是聚集索引時,并不能僅僅刪除聚集索引。因此,我們只能將整個主鍵刪除,然后重新創(chuàng)建一個主鍵,只是在創(chuàng)建主鍵時,不將其設(shè)為聚集索引,如以下代碼所示:
--刪掉主鍵
ALTER TABLE Sale DROP constraint PK_Sale
--創(chuàng)建主鍵,但不設(shè)為聚集索引
ALTER TABLE Sale ADD CONSTRAINT PK_Sale PRIMARY KEY NONCLUSTERED
(
[ID] ASC
) ON [PRIMARY]
在重新非聚集主鍵之后,就可以為表創(chuàng)建一個新的聚集索引,并且在這個聚集索引中使用分區(qū)方案,如以下代碼所示:
--創(chuàng)建一個新的聚集索引,在該聚集索引中使用分區(qū)方案
CREATE CLUSTERED INDEX CT_Sale ON Sale([SaleTime])
ON partschSale([SaleTime])
為表創(chuàng)建了一個使用分區(qū)方案的聚集索引之后,該表就變成了一個分區(qū)表,查看其屬性。
我們可以再一次使用以下代碼來看看每個分區(qū)表中的記錄數(shù)。
--統(tǒng)計所有分區(qū)表中的記錄總數(shù)
select $PARTITION.partfunSale(SaleTime) as 分區(qū)編號,count(id) as 記錄數(shù) from Sale group by $PARTITION.partfunSale(SaleTime)
以上代碼的運行結(jié)果如下所示,說明在將普通表轉(zhuǎn)換成分區(qū)表之后,數(shù)據(jù)不但沒有丟失,而且還自動地放在了它應(yīng)在的分區(qū)表中了。
關(guān)于SQL Server中如何將普通表轉(zhuǎn)換成分區(qū)表就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。