十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本篇內(nèi)容主要講解“SQL Server如何將普通表轉(zhuǎn)成分區(qū)表”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“SQL Server如何將普通表轉(zhuǎn)成分區(qū)表”吧!
創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)石泉,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
在設(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ù)。
--新建一個普通的數(shù)據(jù)表
CREATE TABLE Sale(
[Id] [int] IDENTITY(1,1) NOT NULL, --自動增長
[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)建的表是普通表,我們來看一下表的屬性,如下圖所示。
在以上代碼中,我們可以看出,這個表擁有一般普通表的特性——有主鍵,同時這個主鍵還是聚集索引。前面說過,分區(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ū)表中了。
到此,相信大家對“SQL Server如何將普通表轉(zhuǎn)成分區(qū)表”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!