MSSQL表分割槽的建立, 橫向 縱向 多維度,多指標 分表
最近在做專案資料庫優化過程中,考慮了資料庫表分割槽的方案,MSSQL2005新增了表分割槽的概念,現在我用測試表來做一次表分割槽。表分割槽可以把不同資料放到不同資料庫檔案,按實體地址來隔開資料,理論情況下如果伺服器是多磁碟,多CPU,還做了磁碟陣列後,查詢操作效率會更明顯。
現在基本所有資料庫都存在表分割槽的概念,但MSSQL表分割槽一些細節又不一樣,我現在也是有一定的瞭解,因此本篇文章不做很細的原理性質的講解,主要講一下MSSQL表分割槽的建立過程。
首先建立新的資料庫檔案,分別放到我本機的D:\SPPartition資料夾下的FirstPart,SecondPart,ThirdPart資料夾,新建
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
建立檔案組FSSP1,預設起始大小5M,最大檔案資料不限制,根據實際數量大小檔案以5M遞增,下面建立的檔案一樣以這樣的配置建立,檔案組新增對應一個數據庫檔案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
建立檔案組FSSP2,新增對應一個數據庫檔案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
建立檔案組FSSP3,新增對應一個數據庫檔案SPTestLevel3.ndf。
查詢當前資料庫CenterMy的分組:
SELECT *
FROM sys.filegroups
可以看到已經有4個分組了,因為預設有PRIMARY主檔案組。
檢視當前資料檔案:
SELECT *
FROM sys.database_files
可以分別看到資料檔案所在目錄。
下面建立分割槽函式,它將為分割槽中資料分佈制定標準。
CREATE PARTITION FUNCTION TestSPFunction (INT)
AS RANGE RIGHT FOR VALUES ( 500, 1000,1300)
GO
這裡Range定義的範圍可以是RIGHT或LEFT,我們這裡使用的範圍是RIGHT,RIGHT表明是<或>=,LEFT表明是<=或>。即<500是一個區,>=500並且<1000是一個區,>=1000並且<1300是一個取,>=1300是一個分割槽,這裡相當於分了4個段的分割槽。
然後建立分割槽方案,它將建立的分割槽函式對映到檔案組,檔案組對應磁碟上的物理資料庫檔案。
CREATE PARTITION SCHEME TestSPScheme
AS PARTITION TestSPFunction
TO ([PRIMARY], FGSP1, FGSP2,FGSP3 )
GO
這裡把分割槽函式的4個段對應到4個檔案組上。
然後把錶鏈接到分割槽方案,這裡使用SPNO主鍵作為分割槽列。
ALTER TABLE TestSP add CONSTRAINT [PK_SPNO] PRIMARY KEY CLUSTERED (SPNo)
ON TestSPScheme(SPNo)
通過上面的操作,表分割槽就建立好了,並且資料自動放到相應的分割槽中了,下面我們查詢下各個分割槽對應的資料量。
select *
FROM sys.partitions
WHERE OBJECT_NAME(OBJECT_ID)='TestSP'
可以看到主分割槽有467條記錄,partion_number的1,2,3,4分別對應不同檔案組對應的row資料條數。
最後查詢表的時候,可以在完全不知道表分割槽的情況下查詢,我們檢視下資料對應的所在分割槽:
SELECT *, $PARTITION.TestSPFunction(SPNo)
FROM TestSP
發現SPNO為500的正好在第二個分割槽了,證明我們建立表分割槽成功了!
上面只是簡單描述了下表分割槽的過程,MSSQL2008還新增了視覺化介面來新增表分割槽,如圖:
本文主要是展現了分割槽的過程,對於實際專案中,是否需要分割槽,怎麼分割槽,分割槽部署到什麼磁碟上,分割槽後索引建立以及是否能達到優化的效果,還需要再根據實際情況更多的考慮,