溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SQL Server如何將普通表轉(zhuǎn)成分區(qū)表

發(fā)布時(shí)間:2021-08-21 03:25:23 來源:億速云 閱讀:242 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“SQL Server如何將普通表轉(zhuǎn)成分區(qū)表”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“SQL Server如何將普通表轉(zhuǎn)成分區(qū)表”吧!

    在設(shè)計(jì)數(shù)據(jù)庫時(shí),經(jīng)常沒有考慮到表分區(qū)的問題,往往在數(shù)據(jù)表承重的負(fù)擔(dān)越來越重時(shí),才會(huì)考慮到分區(qū)方式,這時(shí),就涉及到如何將普通表轉(zhuǎn)換成分區(qū)表的問題了。

    那么,如何將一個(gè)普通表轉(zhuǎn)換成一個(gè)分區(qū)表 呢?說到底,只要將該表創(chuàng)建一個(gè)聚集索引,并在聚集索引上使用分區(qū)方案即可。

    不過,這回說起來簡(jiǎn)單,做起來就復(fù)雜了一點(diǎn)。還是接著上面的例子,我們先使用以下SQL語句將原有的Sale表刪除。

--刪除原來的數(shù)據(jù)表  

drop table Sale  

然后使用以下SQL語句創(chuàng)建一個(gè)新的普通表,并在這個(gè)表里插入一些數(shù)據(jù)。

--新建一個(gè)普通的數(shù)據(jù)表  

CREATE TABLE Sale(  

    [Id] [int] IDENTITY(1,1) NOT NULL,          --自動(dòng)增長(zhǎng)  

    [Name] [varchar](16) NOT NULL,  

    [SaleTime] [datetime] NOT NULL,  

    CONSTRAINT [PK_Sale] PRIMARY KEY CLUSTERED  --創(chuàng)建主鍵  

    (  

        [Id] ASC  

    )  

)  

--插入一些記錄  

insert Sale ([Name],[SaleTime]) values ('張三','2009-1-1')    

insert Sale ([Name],[SaleTime]) values ('李四','2009-2-1')    

insert Sale ([Name],[SaleTime]) values ('王五','2009-3-1')    

insert Sale ([Name],[SaleTime]) values ('錢六','2010-4-1')    

insert Sale ([Name],[SaleTime]) values ('趙七','2010-5-1')    

insert Sale ([Name],[SaleTime]) values ('張三','2011-6-1')    

insert Sale ([Name],[SaleTime]) values ('李四','2011-7-1')    

insert Sale ([Name],[SaleTime]) values ('王五','2011-8-1')    

insert Sale ([Name],[SaleTime]) values ('錢六','2012-9-1')    

insert Sale ([Name],[SaleTime]) values ('趙七','2012-10-1')    

insert Sale ([Name],[SaleTime]) values ('張三','2012-11-1')    

insert Sale ([Name],[SaleTime]) values ('李四','2013-12-1')    

insert Sale ([Name],[SaleTime]) values ('王五','2014-12-1')    

    使用以上代碼創(chuàng)建的表是普通表,我們來看一下表的屬性,如下圖所示。

SQL Server如何將普通表轉(zhuǎn)成分區(qū)表

    在以上代碼中,我們可以看出,這個(gè)表擁有一般普通表的特性——有主鍵,同時(shí)這個(gè)主鍵還是聚集索引。前面說過,分區(qū)表是以某個(gè)字段為分區(qū)條件,所以,除了這個(gè)字段以外的其他字段,是不能創(chuàng)建聚集索引的。因此,要想將普通表轉(zhuǎn)換成分區(qū)表,就必須要先刪除聚集索引,然后再創(chuàng)建一個(gè)新的聚集索引,在該聚集索引中使用分區(qū)方案。

    可惜的是,在SQL Server中,如果一個(gè)字段既是主鍵又是聚集索引時(shí),并不能僅僅刪除聚集索引。因此,我們只能將整個(gè)主鍵刪除,然后重新創(chuàng)建一個(gè)主鍵,只是在創(chuàng)建主鍵時(shí),不將其設(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)建一個(gè)新的聚集索引,并且在這個(gè)聚集索引中使用分區(qū)方案,如以下代碼所示:

--創(chuàng)建一個(gè)新的聚集索引,在該聚集索引中使用分區(qū)方案  

CREATE CLUSTERED INDEX CT_Sale ON Sale([SaleTime])  

ON partschSale([SaleTime])  

    為表創(chuàng)建了一個(gè)使用分區(qū)方案的聚集索引之后,該表就變成了一個(gè)分區(qū)表,查看其屬性,如下圖所示。

SQL Server如何將普通表轉(zhuǎn)成分區(qū)表

    我們可以再一次使用以下代碼來看看每個(gè)分區(qū)表中的記錄數(shù)。

--統(tǒng)計(jì)所有分區(qū)表中的記錄總數(shù)    

select $PARTITION.partfunSale(SaleTime) as 分區(qū)編號(hào),count(id) as 記錄數(shù) from Sale group by $PARTITION.partfunSale(SaleTime)    

    以上代碼的運(yùn)行結(jié)果如下所示,說明在將普通表轉(zhuǎn)換成分區(qū)表之后,數(shù)據(jù)不但沒有丟失,而且還自動(dòng)地放在了它應(yīng)在的分區(qū)表中了。

SQL Server如何將普通表轉(zhuǎn)成分區(qū)表

到此,相信大家對(duì)“SQL Server如何將普通表轉(zhuǎn)成分區(qū)表”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI