您好,登錄后才能下訂單哦!
本篇內(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)建的表是普通表,我們來看一下表的屬性,如下圖所示。
在以上代碼中,我們可以看出,這個(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ū)表,查看其屬性,如下圖所示。
我們可以再一次使用以下代碼來看看每個(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ū)表中了。
到此,相信大家對(duì)“SQL Server如何將普通表轉(zhuǎn)成分區(qū)表”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(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)容。