当前位置: 代码迷 >> 综合 >> SqlServer2008实例27管理超大型表之把分区移动到不同的表
  详细解决方案

SqlServer2008实例27管理超大型表之把分区移动到不同的表

热度:63   发布时间:2024-01-30 18:23:43.0

    使用SQL Server的分区功能,可以用最少的工作或最小开销在不同的表之间转移分区。可以使用ALTER TABLE...SWITCH在表之间转移分区。转移能以3种方式进行:

  • 从一个已分区的表转移一个分区到另外一个已分区的表(都需要对同一列进行分区)
  • 转移整个未分区的表到一个已分区的表,
  • 从一个已分区的表移动一个分区到一个未分区的表。

    在SQL Server 2005中,不能在绑定了架构的视图中引用分区表,也不允许使用索引视图.SQL Server 2008支持架构绑定和分区索引视图.
在表之间切换分区的基本语法如下:

ALTER TABLE tablenameSWITCH [ PARTITlON source_partition_number_expression )TO [ schema_name.] target_table[ PARTITION target_partition_number_expression]

      ALTER  TABLE...SWITCH参数

参  数

描  述

tablename

要移动分区的源表

source_partition_number_expression

要重新分配的分区号

[ schema_name.] target_table

接收分区的目标表

PARTITION target_partition_number_expression

目标分区号

    例如,在Sales.WebSiteHits表和一个叫做Sales.WebSiteHitsHistory的新表之间移动分区。第一步是创建一个新表来保存历史网站点击信息:

CREATE TABLE Sales.WebSiteHitsHistory
(
WebSiteHitID bigint NOT NULL IDENTITY(1,1),
WebSitePage varchar(255) NOT NULL,
HitDate datetime NOT NULL
CONSTRAINT PK_WebSiteHitsHistory
PRIMARY KEY (WebSiteHitID,HitDate)
)
ON [HitDateRangeScheme] (HitDate)

--然后,使用ALTER TABLE把Sales.WebSiteHits表的3号分区转移到新表Salles.WebSiteHitsHistory
--的3号分区中
ALTER TABLE Sales.WebSiteHits SWITCH PARTITION 3
TO Sales.WebSiteHitsHistory PARTITION 3

--接着,使用$PARTITION执行查询来查看转移到新表巾的数据:
SELECT HitDate,$PARTITION.HitDateRange (HitDate) Partition
FROM Sales.WebSiteHitsHistory

    在表之间转移分区比手动执行行操作(例如INSERT_S卧ECT)快很多,凶为并小是真正移动物理数据,只是修改了有关分区目前保存在哪里的元数据。同样要记住,任何既有表的目标分区必须是空的才能作为目的分区。如果它是一个未分区的表,它也必须是空的。

  相关解决方案