MSSQL表分区的创建
最近在做項目數據庫優化過程中,考慮了數據庫表分區的方案,MSSQL2005新增了表分區的概念,現在我用測試表來做一次表分區。表分區可以把不同數據放到不同數據庫文件,按物理地址來隔開數據,理論情況下如果服務器是多磁盤,多CPU,還做了磁盤陣列后,查詢操作效率會更明顯。
現在基本所有數據庫都存在表分區的概念,但MSSQL表分區一些細節又不一樣,我現在也是有一定的了解,因此本篇文章不做很細的原理性質的講解,主要講一下MSSQL表分區的創建過程。
首先創建新的數據庫文件,分別放到我本機的D:\SPPartition文件夾下的FirstPart,SecondPart,ThirdPart文件夾,新建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定義的范圍可以是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還新增了可視化界面來添加表分區,如圖:
?
本文主要是展現了分區的過程,對于實際項目中,是否需要分區,怎么分區,分區部署到什么磁盤上,分區后索引創建以及是否能達到優化的效果,還需要再根據實際情況更多的考慮,
?
轉載于:https://www.cnblogs.com/Lawson/archive/2011/09/28/2194824.html
總結
以上是生活随笔為你收集整理的MSSQL表分区的创建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取计算机中的硬件信息
- 下一篇: 庆祝Dojo中文博客成为CSDN博客专家