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

问题描述 投票:0回答:2

我有时在 SQL Server 2008 上使用 switch table 在 2 个表之间快速传输数据,但我不知道它是如何工作的,以及这与只是一个

insert into T2 select * from T1
有什么区别。

有人可以详细解释一下它的工作原理和区别吗?

此外,我注意到,如果两个表都不是克隆,则此语句不起作用。例如,如果我在一个表中有一个索引,而在另一个表中没有,则会失败。

sql-server sql-server-2008
2个回答
23
投票

使用语句插入数据

insert into T2 select * from T1

通过将 T1 中的数据插入到 T2 中来加载数据。 当分区转移(切换)时,数据并没有物理移动;仅有关数据位置的元数据发生变化。

在切换分区之前,必须满足几个一般要求:

切换分区的一般要求:

分区转移时,数据并没有物理移动;仅有关数据位置的元数据发生变化。在切换分区之前,必须满足几个一般要求:

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

此信息及更多信息位于此处:

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


0
投票
SQL Server 中的 SWITCH 操作通常用于通过更改元数据指针而不是物理移动数据来在表或分区之间快速移动数据。这是您的代码的解释:

BEGIN TRANSACTION:这将启动一个事务,允许您将多个操作捆绑到一个原子操作中,该操作可以整体成功,也可以在出现错误时回滚。

ALTER TABLE dbo.OriginalTable SWITCH TO dbo.OriginalTable_Shadow:此命令将数据从 SQL Server 中的 dbo.OriginalTable 移动到 dbo.OriginalTable_Shadow,而无需物理复制数据。相反,它只是更新元数据中的指针。它通常用于分区切换或使数据归档操作更高效。

提交事务:如果一切执行成功,则事务提交,使所有更改永久化。

重要注意事项 约束:源表和目标表必须具有相同的结构,包括索引和约束。 清空目标表:切换前 dbo.OriginalTable_Shadow 必须为空。 恢复模型:确保您的 SQL Server 恢复模型和索引策略按预期支持 SWITCH 操作,特别是当您将其用于归档或分区时。 如果失败时需要回滚,可以添加错误处理来检查事务期间是否存在异常,并在必要时使用 ROLLBACK TRANSACTION。

© www.soinside.com 2019 - 2024. All rights reserved.