SQL Server上的alter table switch如何工作?

13

我有时会在SQL Server 2008上使用switch table快速传输两个表之间的数据,但我不知道它是如何工作的,以及与insert into T2 select * from T1相比的区别。

有人可以详细解释一下它是如何工作的以及区别吗?

此外,我注意到如果这两个表不是克隆的,该语句就无法正常工作。例如,如果一个表中有一个索引而另一个表中没有,则会失败。


2
我没有查看后端以确定,但我理解SWITCH的工作方式是仅更新分区引用,而不是在物理上移动数据。而在您的示例中,它将复制所有数据到新表中。[相关MSDN文章。] (https://technet.microsoft.com/en-us/library/ms191160(v=sql.105).aspx) - Siyual
1个回答

20

使用语句插入数据

insert into T2 select * from T1

通过将来自 T1 的数据插入到 T2 中,加载数据。当转移(切换)分区时,数据并不会被物理移动,只有关于数据位置的元数据会发生更改。

在切换分区之前,必须满足以下几个通用要求:

切换分区的通用要求:

当分区被转移时,数据并不会被物理移动,只有关于数据位置的元数据会发生更改。在执行切换操作之前,必须满足以下几个通用要求:

  1. 在执行 SWITCH 操作之前,源表(正在移动分区的表)和接收分区的表(目标表)都必须存在于数据库中。
  2. 接收分区必须存在且为空。无论是将表作为一个分区添加到已有的分区表中,还是从一个分区表中移动分区到另一个分区表中,接收新分区的分区必须存在,并且它必须是一个空分区。
  3. 接收非分区表必须存在且为空。如果要重新分配分区以形成一个非分区表,则接收新分区的表必须存在并且为空的非分区表。
  4. 分区必须基于同一列。如果将分区从一个分区表切换到另一个分区表,则两个表都必须基于同一列进行分区。
  5. 源表和目标表必须共享相同的文件组。 ALTER TABLE ... SWITCH 语句中的源表和目标表必须驻留在同一文件组中,它们的大值列必须存储在同一文件组中。任何相应的索引、索引分区或索引视图分区也必须驻留在同一文件组中。但是,文件组可以不同于相应的表或其他相应的索引的文件组。

更多信息请参见此处:

https://technet.microsoft.com/zh-cn/library/ms191160(v=sql.105).aspx


好的回答!谢谢。 - mrc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接