视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MSSQL表分区的创建详细讲解过程
2020-11-09 10:01:03 责编:小采
文档


现在基本所有数据库都存在表分区的概念,但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:SPPartitionFirstPartSPTestLevel1.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:SPPartitionSecondPartSPTestLevel2.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:SPPartitionThirdPartSPTestLevel3.ndf',

SIZE = 5120 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 5120 KB

) TO FILEGROUP FGSP3

GO

创建文件组FSSP3,添加对应一个数据库文件SPTestLevel3.ndf。

查询当前数据库CenterMy的分组:

代码如下

SELECT *

FROM sys.filegrou

可以看到已经有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)

通过上面的操作,表分区就创建好了,并且数据自动放到相应的分区中了,下面我们查询下各个分区对应的数据量。

*

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还新增了可视化界面来添加表分区,如图:

本文主要是展现了分区的过程,对于实际项目中,是否需要分区,怎么分区,分区部署到什么磁盘上,分区后索引创建以及是否能达到优化的效果,还需要再根据实际情况更多的考虑,

下载本文
显示全文
专题