SQL server 2005 中的分區表(代碼示例)

在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

請注意修改和創建之間的一些差別

再用上面的代碼看看數據分佈的情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章