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

博客介绍了数据库中建立分区表的步骤,包括创建数据库、分区函数、分区Scheme和分区表,还给出将Staff表按StaffName分布到三个分区的代码示例。同时说明了修改分区表的步骤,如添加文件组、修改分区Scheme和函数,并提醒注意创建与修改的差别。
在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:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_AH.mdf'
),
FILEGROUP FileGroup_I_N
(
NAME 
= N'File_I_N',FileName = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\PartitionDataBase_IN.mdf'
),
FILEGROUP FileGorup_M_Z
(
NAME 
= N'File_M_Z',FileName = 'D:\Program Files\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](100NOT 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:\Program Files\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

请注意修改和创建之间的一些差别

再用上面的代码看看数据分布的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值