1. 程式人生 > >MSSQL表分割槽的建立, 橫向 縱向 多維度,多指標 分表

MSSQL表分割槽的建立, 橫向 縱向 多維度,多指標 分表

最近在做專案資料庫優化過程中,考慮了資料庫表分割槽的方案,MSSQL2005新增了表分割槽的概念,現在我用測試表來做一次表分割槽。表分割槽可以把不同資料放到不同資料庫檔案,按實體地址來隔開資料,理論情況下如果伺服器是多磁碟,多CPU,還做了磁碟陣列後,查詢操作效率會更明顯。

現在基本所有資料庫都存在表分割槽的概念,但MSSQL表分割槽一些細節又不一樣,我現在也是有一定的瞭解,因此本篇文章不做很細的原理性質的講解,主要講一下MSSQL表分割槽的建立過程。

首先建立新的資料庫檔案,分別放到我本機的D:\SPPartition資料夾下的FirstPartSecondPartThirdPart資料夾,新建

3個檔案檔案分別對應3個檔案組,以我本機中存在的資料庫CenterMy為例子,它現在有個表TestSP,這是一個使用者表,現在測試資料只有1000多條資料,建立程式碼如下:

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定義的範圍可以是RIGHTLEFT,我們這裡使用的範圍是RIGHTRIGHT表明是<>=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_number1234分別對應不同檔案組對應的row資料條數。

最後查詢表的時候,可以在完全不知道表分割槽的情況下查詢,我們檢視下資料對應的所在分割槽:

SELECT *, $PARTITION.TestSPFunction(SPNo)

 FROM TestSP

發現SPNO500的正好在第二個分割槽了,證明我們建立表分割槽成功了!

上面只是簡單描述了下表分割槽的過程,MSSQL2008還新增了視覺化介面來新增表分割槽,如圖:

 

本文主要是展現了分割槽的過程,對於實際專案中,是否需要分割槽,怎麼分割槽,分割槽部署到什麼磁碟上,分割槽後索引建立以及是否能達到優化的效果,還需要再根據實際情況更多的考慮,