--=========================================
-- 转换为分区表
--=========================================
-- 1. 创建分区函数
-- a. 适用于存储历史存档记录的分区表的分区函数
DECLARE @dt datetime
SET @dt = '20020101'
CREATE PARTITION FUNCTION PF_HistoryArchive(datetime)
AS RANGE RIGHT
FOR VALUES(
@dt,
DATEADD(Year, 1, @dt))
-- b. 适用于存储历史记录的分区表的分区函数
--DECLARE @dt datetime
SET @dt = '20000101'
CREATE PARTITION FUNCTION PF_History(datetime)
AS RANGE RIGHT
FOR VALUES(
@dt,
DATEADD(Month, 1, @dt),
DATEADD(Month, 2, @dt),
DATEADD(Month, 3, @dt),
DATEADD(Month, 4, @dt),
DATEADD(Month, 5, @dt),
DATEADD(Month, 6, @dt),
DATEADD(Month, 7, @dt),
DATEADD(Month, 8, @dt),
DATEADD(Month, 9, @dt),
DATEADD(Month, 10, @dt),
DATEADD(Month, 11, @dt),
DATEADD(Month, 12, @dt))
GO
-- 2. 创建分区架构
-- a. 适用于存储历史存档记录的分区表的分区架构
CREATE PARTITION SCHEME PS_HistoryArchive
AS PARTITION PF_HistoryArchive
TO([PRIMARY], [PRIMARY], [PRIMARY])
-- b. 适用于存储历史记录的分区表的分区架构
CREATE PARTITION SCHEME PS_History
AS PARTITION PF_History
TO([PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY])
GO
-- 3. 删除索引
-- a. 删除存储历史存档记录的表中的索引
DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ProductID
DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID
-- b. 删除存储历史记录的表中的索引
DROP INDEX Production.TransactionHistory.IX_TransactionHistory_ProductID
DROP INDEX Production.TransactionHistory.IX_TransactionHistory_ReferenceOrderID_ReferenceOrderLineID
GO
-- 4. 转换为分区表
-- a. 将存储历史存档记录的表转换为分区表
ALTER TABLE Production.TransactionHistoryArchive
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
WITH(
MOVE TO PS_HistoryArchive(TransactionDate))
-- b.将存储历史记录的表转换为分区表
ALTER TABLE Production.TransactionHistory
DROP CONSTRAINT PK_TransactionHistory_TransactionID
WITH(
MOVE TO PS_History(TransactionDate))
GO
-- 5. 恢复主键
-- a. 恢复存储历史存档记录的分区表的主键
ALTER TABLE Production.TransactionHistoryArchive
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID
PRIMARY KEY CLUSTERED(
TransactionID,
TransactionDate)
-- b. 恢复存储历史记录的分区表的主键
ALTER TABLE Production.TransactionHistory
ADD CONSTRAINT PK_TransactionHistory_TransactionID
PRIMARY KEY CLUSTERED(
TransactionID,
TransactionDate)
GO
-- 6. 恢复索引
-- a. 恢复存储历史存档记录的分区表的索引
CREATE INDEX IX_TransactionHistoryArchive_ProductID
ON Production.TransactionHistoryArchive(
ProductID)
CREATE INDEX IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID
ON Production.TransactionHistoryArchive(
ReferenceOrderID,
ReferenceOrderLineID)
-- b. 恢复存储历史记录的分区表的索引
CREATE INDEX IX_TransactionHistory_ProductID
ON Production.TransactionHistory(
ProductID)
CREATE INDEX IX_TransactionHistory_ReferenceOrderID_ReferenceOrderLineID
ON Production.TransactionHistory(
ReferenceOrderID,
ReferenceOrderLineID)
GO
-- 7. 查看分区表的相关信息
SELECT
SchemaName = S.name,
TableName = TB.name,
PartitionScheme = PS.name,
PartitionFunction = PF.name,
PartitionFunctionRangeType = CASE
WHEN boundary_value_on_right = 0 THEN 'LEFT'
ELSE 'RIGHT' END,
PartitionFunctionFanout = PF.fanout,
SchemaID = S.schema_id,
ObjectID = TB.object_id,
PartitionSchemeID = PS.data_space_id,
PartitionFunctionID = PS.function_id
FROM sys.schemas S
INNER JOIN sys.tables TB
ON S.schema_id = TB.schema_id
INNER JOIN sys.indexes IDX
on TB.object_id = IDX.object_id
AND IDX.index_id < 2
INNER JOIN sys.partition_schemes PS
ON PS.data_space_id = IDX.data_space_id
INNER JOIN sys.partition_functions PF
ON PS.function_id = PF.function_id
GO
--=========================================
-- 移动分区表数据
--=========================================
-- 1. 为存储历史存档记录的分区表增加分区, 并接受从历史记录分区表移动过来的数据
-- a. 修改分区架构, 增加用以接受新分区的文件组
ALTER PARTITION SCHEME PS_HistoryArchive
NEXT USED [PRIMARY]
-- b. 修改分区函数, 增加分区用以接受从历史记录分区表移动过来的数据
DECLARE @dt datetime
SET @dt = '20030901'
ALTER PARTITION FUNCTION PF_HistoryArchive()
SPLIT RANGE(@dt)
-- c. 将历史记录表中的过期数据移动到历史存档记录表中
ALTER TABLE Production.TransactionHistory
SWITCH PARTITION 2
TO Production.TransactionHistoryArchive PARTITION $PARTITION.PF_HistoryArchive(@dt)
-- d. 将接受到的数据与原来的分区合并
ALTER PARTITION FUNCTION PF_HistoryArchive()
MERGE RANGE(@dt)
GO
-- 2. 将存储历史记录的分区表中不包含数据的分区删除, 并增加新的分区以接受新数据
-- a. 合并不包含数据的分区
DECLARE @dt datetime
SET @dt = '20030901'
ALTER PARTITION FUNCTION PF_History()
MERGE RANGE(@dt)
-- b. 修改分区架构, 增加用以接受新分区的文件组
ALTER PARTITION SCHEME PS_History
NEXT USED [PRIMARY]
-- c. 修改分区函数, 增加分区用以接受新数据
SET @dt = '20041001'
ALTER PARTITION FUNCTION PF_History()
SPLIT RANGE(@dt)
GO
--=========================================
-- 清除历史存档记录中的过期数据
--=========================================
-- 1. 创建用于保存过期的历史存档数据的表
CREATE TABLE Production.TransactionHistoryArchive_2001_temp(
TransactionID int NOT NULL,
ProductID int NOT NULL,
ReferenceOrderID int NOT NULL,
ReferenceOrderLineID int NOT NULL
DEFAULT ((0)),
TransactionDate datetime NOT NULL
DEFAULT (GETDATE()),
TransactionType nchar(1) NOT NULL,
Quantity int NOT NULL,
ActualCost money NOT NULL,
ModifiedDate datetime NOT NULL
DEFAULT (GETDATE()),
CONSTRAINT PK_TransactionHistoryArchive_2001_temp_TransactionID
PRIMARY KEY CLUSTERED(
TransactionID,
TransactionDate)
)
-- 2. 将数据从历史存档记录分区表移动到第步创建的表中
ALTER TABLE Production.TransactionHistoryArchive
SWITCH PARTITION 1
TO Production.TransactionHistoryArchive_2001_temp
-- 3. 删除不再包含数据的分区
DECLARE @dt datetime
SET @dt = '20020101'
ALTER PARTITION FUNCTION PF_HistoryArchive()
MERGE RANGE(@dt)
-- 4. 修改分区架构, 增加用以接受新分区的文件组
ALTER PARTITION SCHEME PS_HistoryArchive
NEXT USED [PRIMARY]
-- 5. 修改分区函数, 增加分区用以接受新数据
SET @dt = '20040101'
ALTER PARTITION FUNCTION PF_HistoryArchive()
SPLIT RANGE(@dt)
分享到:
相关推荐
### SQL Server 2005 分区表技术详解 #### 一、引言 随着数据库规模的不断扩大,数据管理和查询效率成为了重要的考虑因素。SQL Server 2005引入了一项重要的特性——**分区表**,它为解决大型表的性能和可管理性...
### SQL Server 2005分区表技术的研究与实现 #### 概述 随着数据库应用系统数据量的不断增加以及业务需求的日益复杂,如何优化数据库性能成为了一个重要的研究课题。在SQL Server 2005平台上开发超市业务分析系统...
在本文中,我们将深入探讨SQL Server 2005中的分区表技术,这是一种用于处理大型表的优化方法。我们将了解分区技术如何提高数据库系统的响应速度和可维护性,以及实现分区表的具体步骤和关键技术。 首先,文章指出...
### SQL Server 2005 中的分区表和索引:深入解析 #### 分区的由来与演变 分区的概念在SQL Server的历史中占据着重要地位。从早期的SQL Server版本开始,数据库管理员就意识到,面对不断增长的数据量,传统的单一...
### 查看SQL Server表分区数据分布 在SQL Server中,为了提高大型数据库的管理效率与查询性能,常常会采用表分区技术。通过合理地将一个表的数据分散到多个物理文件或文件组上,可以显著提升数据处理的速度。本文将...
从 SQL Server 2005 开始,微软引入了分区表功能,以帮助提高对大型数据集的操作效率。 **分区表**是指将一个表中的数据按照一定的规则(如范围或列表)分散存储在多个物理文件或文件组中的一种技术。这样做的目的...
分区表是SQL Server 2005提供的一种高级数据管理技术,主要用于优化大规模数据表的性能。当你的数据库中存在数据量巨大且查询频繁的表时,分区表能够显著提升查询效率,降低维护成本。分区表的核心思想是将一个大的...
### MS SQL Server 分区表、分区索引详解 #### 一、分区表简介 使用分区表的主要目的是为了改善大型表及具有多种访问模式的表的可伸缩性和可管理性。这里的“大型表”指的是数据量巨大的表,“访问模式”是指因不同...
SQL Server 2008 分区表快速创建 SQL Server 2008 分区表快速创建是指在 SQL Server 2008 环境中快速创建分区表的过程。分区表是指将大型表分割成多个小表,以提高查询性能和数据管理效率。下面是快速创建分区表的...
【SQL Server 2005 创建分区表与分区索引详解】 分区表和分区索引是SQL Server 2005为企业级数据管理和性能优化提供的重要特性,尤其适用于处理大量数据的大型表。分区能够将数据划分为独立的、易于管理的块,这有...
SQL Server 2005及以上版本开始支持表分区功能。 **2. 表分区的原理** 表分区基于一种叫做“分区函数”的机制,这个函数将表的行映射到不同的分区。分区可以按照时间、数量或其他业务关键字段进行。例如,根据日期...
### SQL Server 大表分区方案详解 #### 一、大表分区条件 在数据库管理过程中,随着业务数据的不断增长,单个表的数据量可能会变得非常庞大,这不仅会导致数据库性能下降,还会影响数据处理效率。为了有效解决这些...
关于sqlserver数据库分区表建立的代码、分区文件、分区文件组,非常实用,供参考下载,本代码仅供那些爱好数据库学习的使用者共享。
在SQL Server 2005中,表分区是一种高级数据库管理技术,用于提高大型数据仓库的性能和可管理性...使用这样的工具,DBA和开发人员可以更轻松地管理和优化他们的SQL Server 2005分区表,提升数据库性能并简化维护任务。
建立分区表需要创建文件组,而创建多个文件组的目的是为了获得好的 I/O 平衡。 在 SQL Server 2005 中引入的表分区技术,允许用户将数据分散存放到不同的物理磁盘中,以提高查询性能。表分区操作过程由三个步骤组成...
- 分区表:在大型数据集上使用分区提高查询性能。 - 视图:创建视图以简化复杂查询,或提供不同视角的数据访问。 - 索引:了解索引的工作原理,创建和优化索引来提升查询速度。 - SSRS(SQL Server Reporting ...
压缩包中的`1.SqlFileGroup.sql`可能包含创建文件组的脚本,而`2.REC_DETECT_MAIN.sql`可能包含创建分区表的详细脚本。`1.jpg`和`2.jpg`可能是关于创建过程的示意图,而`说明.txt`可能提供有关脚本执行的额外说明或...
这个压缩包包含四本关于SQL Server 2005的技术内幕书籍,分别聚焦于T-SQL查询、T-SQL程序设计、存储引擎以及查询、调整和优化,另外还附带了一本与.NET相关的文档,对于深入理解SQL Server 2005的各个方面有着重要的...
SQL Server 2005 中的分区表和索引 SQL Server 2005 中的分区表和索引是改善大型表和具有各种访问模式的表的可伸缩性和可管理性的重要工具。分区可以将大型表分为更小、更容易管理的部分,提供一定的帮助。创建分区...