技术开发 频道

SQL Server 2005 中的分区表(代码示例)

  【IT168技术文档】

  本文来介绍一下在SQL server 2005中一个新的特性——分区表。

  建立分区表的步骤:

  1 创建数据库(必须在多个文件组中)

  2 创建分区函数

  3 创建分区Scheme

  4 创建分区表

USE master;
GO
IF OBJECT_ID (N'PartitionDataBase') IS NOT NULL
DROP DATABASE PartitionDataBase;
GO
/* CREATE DATABASE */
CREATE DATABASE PartitionDataBase
ON PRIMARY
(
NAME = N'File_A_H',
FileName = 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_AH.mdf' ), FILEGROUP FileGroup_I_N ( NAME = N'File_I_N',
FileName = 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_IN.mdf' ), FILEGROUP FileGorup_M_Z ( NAME = N'File_M_Z',
FileName = 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_MZ.mdf' ) GO USE PartitionDataBase; GO /* 创建分区函数 */ CREATE PARTITION FUNCTION StaffNameRangePFN(varchar(100)) AS RANGE LEFT FOR VALUES ('H','M') GO /* 创建分区Scheme */ CREATE PARTITION SCHEME StaffNamePScheme AS PARTITION StaffNameRangePFN TO ([PRIMARY], FileGroup_I_N, FileGorup_M_Z) GO IF OBJECT_ID (N'Staff') IS NOT NULL DROP TABLE dbo.Staff; /* 创建分区表 */ CREATE TABLE [dbo].[Staff] ( [StaffName] [varchar](100) NOT NULL ) ON StaffNamePScheme ([StaffName]) GO CREATE CLUSTERED INDEX IX_StaffName ON [Staff]([StaffName]) GO

  下面的代码将Staff表按StaffName分布到三个分区中。

  插入一些测试数据

INSERT INTO [dbo].[Staff] SELECT FirstName FROM AdventureWorks.Person.Contact

  运行下面的代码,看看数据的分布情况

SELECT $partition.StaffNameRangePFN(StaffName) AS [Partition Number], MIN(StaffName) AS [Min StaffName], MAX(StaffName) AS [Max StaffName], COUNT(StaffName) AS [Rows In Partition] FROM dbo.staff AS o GROUP BY $partition.StaffNameRangePFN(StaffName) ORDER BY [Partition Number]

  看起来还不错。三个分区都差不多的数据。我们来打破这个平衡

INSERT INTO [dbo].[Staff] SELECT AddressLine1 FROM AdventureWorks.Person.Address

  修改分区表的步骤:

  1 添加一个文件组到数据库

  2 修改分区Scheme

  3 修改分区函数

Use master
GO
ALTER DATABASE PartitionDataBase ADD FILEGROUP FileGroup_0_9
GO
ALTER DATABASE PartitionDataBase
ADD FILE
(
NAME = N'File_0_9'
FileName = 'D:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_09.mdf' ) TO FILEGROUP FileGroup_0_9 GO Use PartitionDataBase GO ALTER PARTITION SCHEME StaffNamePScheme NEXT USED FileGroup_0_9; GO ALTER PARTITION FUNCTION StaffNameRangePFN() SPLIT RANGE ('A'); GO

  请注意修改和创建之间的一些差别,再用上面的代码看看数据分布的情况。

0
相关文章