SQLServer中利用水平分区创建表计算机等级考试
文章作者 100test 发表时间 2010:01:01 08:28:27
来源 100Test.Com百考试题网
在SQL Server 2000及之前的版本中有分区视图的选项,但它有些局限性,在真正实施前需要考虑的事情太多,在SQL Server 2005及后续的版本中有一个水平分区选项,可以分到1000个分区,数据位置是由SQL Server自动处理的,水平分区是将表中的行分成给定数量的分区的过程,每个分区中列的数量是相同的。
在一个水平分区表中有多个分区,每个分区对应一个文件组,这样就产生了很多文件组,因此性能也会有所提升,包括I/O性能提升,因为所有分区可以驻扎在一个不同的磁盘上,另一个好处是可以通过备份文件组单独备份一个分区,此外,SQL Server数据库引擎可以智能判断哪个分区上存放了什么数据,如果不止一个分区被访问,那么还可以借助多处理器实现并行数据检索。这种设计也充分利用了分区表的优势。
在运行下面的脚本之前,先创建几个文件夹:
D:\PartitionDB\FG1
D:\PartitionDB\FG2
D:\PartitionDB\FG3
接下来运行下面的脚本创建一个新数据库,在三个文件组上创建三个数据文件:
脚本1:创建一个表,使用三个数据文件
USE Master
GO
CREATE DATABASE DBForPartitioning
ON PRIMARY
(NAME= DBForPartitioning_1 ,
FILENAME=
D:\PartitionDB\FG1\DBForPartitioning_1.mdf ,
SIZE=2,
MAXSIZE=100,
FILEGROWTH=1 ),
FILEGROUP FG2
(NAME = DBForPartitioning_2 ,
FILENAME =
D:\PartitionDB\FG2\DBForPartitioning_2.ndf ,
SIZE = 2,
MAXSIZE=100,
FILEGROWTH=1 ),
FILEGROUP FG3
(NAME = DBForPartitioning_3 ,
FILENAME =
D:\PartitionDB\FG3\DBForPartitioning_3.ndf ,
SIZE = 2,
MAXSIZE=100,
FILEGROWTH=1 )
GO
现在我们有一个数据库DBForPartitioning,在三个文件组中创建了三个数据文件,可以使用下面的脚本进行确认:
脚本2:确定文件组的数量和DBForPartitioning数据库数据文件的数量
Use DBFOrPartitioning
GO
-- Confirm Filegroups
SELECT name as [File Group Name]
FROM sys.filegroups
WHERE type = FG
GO -- Confirm Datafiles
SELECT name as [DB File Name],physical_name as [DB File Path]
FROM sys.database_files
where type_desc = ROWS
GO
规划
在SQL Server中要实现水平分区表有三个主要的步骤:
创建分区函数,它将为分割分区中数据建立标准。
创建分区方案,将创建的分区函数映射到文件组,它和数据在磁盘上的物理存储是相关的。
创建一个表,将其链接到分区方案,也链接到分区函数,这个时候将会使用到一个分区列。
在真正开始这三个步骤之前,我们先要对要进行水平分区的表的结构充分地了解,在前面我们已经提到要对将要归档的销售数据表进行水平分区,假设我们的分区归档表结构是SalesArchival(saleTime dateTime, item varchar(50)),数据将要被送到分区的列叫做分区列,它将用在分区函数中作为分区键,分区列很重要,需要满足下面的条件:
分区列总是只有一个唯一列或计算列,或通过组合多个列持续计算的列。
编辑特别推荐:
计算机三级的四个类别看看你适合哪个
任何数据类型的分区列都可以用作索引键,除了TIMESTAMP数据类型。
创建分区函数
在我们的例子中,有2007,2008和2009年的销售数据,因此这里我们创建三个分区表,在分区函数中提供两个分区范围,分区函数将会创建数据边界,我们需要将2009年之前的销售数据全部放到第一个分区中,2009年的销售数据放在第二个分区中,2009年以后的销售数据放在第三个分区中。
脚本3:创建分区函数
Use DBForPartitioning
GO
CREATE PARTITION FUNCTION salesYearPartitions (datetime)
AS RANGE RIGHT FOR VALUES ( 2009-01-01 , 2010-01-01 )
GO
函数中提供的分区键是分区表中的主键,分区范围也是基于这一列的,在我们的表中这一列是saleTime,其数据类型是DATETIME,定义的范围可能是RIGHT或LEFT,我们这里使用的范围是RIGHT,RIGHT意味着