MSSQL表分区的创建
最近在做項(xiàng)目數(shù)據(jù)庫(kù)優(yōu)化過(guò)程中,考慮了數(shù)據(jù)庫(kù)表分區(qū)的方案,MSSQL2005新增了表分區(qū)的概念,現(xiàn)在我用測(cè)試表來(lái)做一次表分區(qū)。表分區(qū)可以把不同數(shù)據(jù)放到不同數(shù)據(jù)庫(kù)文件,按物理地址來(lái)隔開(kāi)數(shù)據(jù),理論情況下如果服務(wù)器是多磁盤,多CPU,還做了磁盤陣列后,查詢操作效率會(huì)更明顯。
現(xiàn)在基本所有數(shù)據(jù)庫(kù)都存在表分區(qū)的概念,但MSSQL表分區(qū)一些細(xì)節(jié)又不一樣,我現(xiàn)在也是有一定的了解,因此本篇文章不做很細(xì)的原理性質(zhì)的講解,主要講一下MSSQL表分區(qū)的創(chuàng)建過(guò)程。
首先創(chuàng)建新的數(shù)據(jù)庫(kù)文件,分別放到我本機(jī)的D:\SPPartition文件夾下的FirstPart,SecondPart,ThirdPart文件夾,新建3個(gè)文件文件分別對(duì)應(yīng)3個(gè)文件組,以我本機(jī)中存在的數(shù)據(jù)庫(kù)CenterMy為例子,它現(xiàn)在有個(gè)表TestSP,這是一個(gè)用戶表,現(xiàn)在測(cè)試數(shù)據(jù)只有1000多條數(shù)據(jù),創(chuàng)建代碼如下:
ALTER DATABASE CenterMy
ADD FILEGROUP FGSP1
GO
ALTER DATABASE CenterMy
??? ADD FILE
??? (
??? NAME = 'SPTestLevel1',
??? FILENAME = 'D:\SPPartition\FirstPart\SPTestLevel1.ndf',
??????? SIZE = 5120 KB,
??????? MAXSIZE = UNLIMITED,
??????? FILEGROWTH = 5120 KB
??? ) TO FILEGROUP FGSP1
GO
創(chuàng)建文件組FSSP1,默認(rèn)起始大小5M,最大文件數(shù)據(jù)不限制,根據(jù)實(shí)際數(shù)量大小文件以5M遞增,下面創(chuàng)建的文件一樣以這樣的配置創(chuàng)建,文件組添加對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)文件SPTestLevel1.ndf。
ALTER DATABASE CenterMy
ADD FILEGROUP FGSP2
GO
ALTER DATABASE CenterMy
??? ADD FILE
??? (
??? NAME = 'SPTestLevel2',
??? FILENAME = 'D:\SPPartition\SecondPart\SPTestLevel2.ndf',
??????? SIZE = 5120 KB,
??????? MAXSIZE = UNLIMITED,
??????? FILEGROWTH = 5120 KB
??? ) TO FILEGROUP FGSP2
GO
創(chuàng)建文件組FSSP2,添加對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)文件SPTestLevel2.ndf。
?
ALTER DATABASE CenterMy
ADD FILEGROUP FGSP3
GO
ALTER DATABASE CenterMy
??? ADD FILE
??? (
??? NAME = 'SPTestLevel3',
??? FILENAME = 'D:\SPPartition\ThirdPart\SPTestLevel3.ndf',
??????? SIZE = 5120 KB,
??????? MAXSIZE = UNLIMITED,
??????? FILEGROWTH = 5120 KB
??? ) TO FILEGROUP FGSP3
GO
創(chuàng)建文件組FSSP3,添加對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)文件SPTestLevel3.ndf。
?
查詢當(dāng)前數(shù)據(jù)庫(kù)CenterMy的分組:
SELECT *
FROM sys.filegroups
可以看到已經(jīng)有4個(gè)分組了,因?yàn)槟J(rèn)有PRIMARY主文件組。
查看當(dāng)前數(shù)據(jù)文件:
SELECT *
FROM sys.database_files
可以分別看到數(shù)據(jù)文件所在目錄。
?
下面創(chuàng)建分區(qū)函數(shù),它將為分區(qū)中數(shù)據(jù)分布制定標(biāo)準(zhǔn)。
CREATE PARTITION FUNCTION TestSPFunction (INT)
AS RANGE RIGHT FOR VALUES ( 500, 1000,1300)
GO
這里Range定義的范圍可以是RIGHT或LEFT,我們這里使用的范圍是RIGHT,RIGHT表明是<或>=,LEFT表明是<=或>。即<500是一個(gè)區(qū),>=500并且<1000是一個(gè)區(qū),>=1000并且<1300是一個(gè)取,>=1300是一個(gè)分區(qū),這里相當(dāng)于分了4個(gè)段的分區(qū)。
然后創(chuàng)建分區(qū)方案,它將創(chuàng)建的分區(qū)函數(shù)映射到文件組,文件組對(duì)應(yīng)磁盤上的物理數(shù)據(jù)庫(kù)文件。
CREATE PARTITION SCHEME TestSPScheme
AS PARTITION TestSPFunction
TO ([PRIMARY], FGSP1, FGSP2,FGSP3 )
GO
這里把分區(qū)函數(shù)的4個(gè)段對(duì)應(yīng)到4個(gè)文件組上。
然后把表鏈接到分區(qū)方案,這里使用SPNO主鍵作為分區(qū)列。
?ALTER TABLE TestSP add CONSTRAINT [PK_SPNO] PRIMARY KEY CLUSTERED (SPNo)??
?ON TestSPScheme(SPNo)??
?
通過(guò)上面的操作,表分區(qū)就創(chuàng)建好了,并且數(shù)據(jù)自動(dòng)放到相應(yīng)的分區(qū)中了,下面我們查詢下各個(gè)分區(qū)對(duì)應(yīng)的數(shù)據(jù)量。
select *
FROM sys.partitions
WHERE OBJECT_NAME(OBJECT_ID)='TestSP'
可以看到主分區(qū)有467條記錄,partion_number的1,2,3,4分別對(duì)應(yīng)不同文件組對(duì)應(yīng)的row數(shù)據(jù)條數(shù)。
最后查詢表的時(shí)候,可以在完全不知道表分區(qū)的情況下查詢,我們查看下數(shù)據(jù)對(duì)應(yīng)的所在分區(qū):
SELECT *, $PARTITION.TestSPFunction(SPNo)
?FROM TestSP
發(fā)現(xiàn)SPNO為500的正好在第二個(gè)分區(qū)了,證明我們創(chuàng)建表分區(qū)成功了!
上面只是簡(jiǎn)單描述了下表分區(qū)的過(guò)程,MSSQL2008還新增了可視化界面來(lái)添加表分區(qū),如圖:
?
本文主要是展現(xiàn)了分區(qū)的過(guò)程,對(duì)于實(shí)際項(xiàng)目中,是否需要分區(qū),怎么分區(qū),分區(qū)部署到什么磁盤上,分區(qū)后索引創(chuàng)建以及是否能達(dá)到優(yōu)化的效果,還需要再根據(jù)實(shí)際情況更多的考慮,
?
轉(zhuǎn)載于:https://www.cnblogs.com/Lawson/archive/2011/09/28/2194824.html
總結(jié)
以上是生活随笔為你收集整理的MSSQL表分区的创建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 获取计算机中的硬件信息
- 下一篇: 6.SQL练习笔记