17

我刚刚创建了一个辅助文件组,并希望将一些表移到它上面,然后将其设为只读。

我不知道该怎么做?

我只用ALTER blah blah TO MyFileGroup吗?

4

3 回答 3

25

这样的事情应该会有所帮助:

CREATE UNIQUE CLUSTERED INDEX PK_YourTableName 
    ON dbo.YourTableName(YourPKFields)
    WITH (DROP_EXISTING = ON) ON [NewFilegroup]
于 2009-04-03T05:40:30.833 回答
7

有两种方法;一个来自 SSMS,另一个使用 TSQL。

来自 SQL Server 2008 联机丛书:

将现有索引移动到不同的文件组或分区方案

  • 在对象资源管理器中,连接到 SQL Server 数据库引擎的一个实例,然后展开该实例。

  • 展开数据库,展开包含具有特定索引的表的数据库,然后展开表。

  • 展开索引所属的表,然后展开Indexes。

  • 右键单击要移动的索引,然后选择属性。

  • 在索引属性对话框中,选择存储页面。

  • 选择要在其中移动索引的文件组。

您不能使用“索引属性”对话框移动使用唯一键或主键约束创建的索引。要移动这些索引,您需要使用带有 DROP CONSTRAINT 选项的 ALTER TABLE (Transact-SQL) 删除约束,然后使用带有 ADD CONSTRAINT 选项的 ALTER TABLE (Transact-SQL) 在所需文件组上重新创建约束。

如果表或索引已分区,请选择要在其中移动索引的分区方案。

[Pre SQL Server 2008:将现有表放在不同的文件组 (SSMS)

  • 展开数据库,展开包含表的数据库,然后单击表。
  • 在详细信息窗格中,右键单击表,然后单击设计表。
  • 右键单击任何列,然后单击“属性”。
  • 在“表”选项卡上的“表文件组”列表中,选择要放置表的文件组。
  • 或者,在文本文件组列表中,选择一个文件组,在该文件组上放置任何文本、图像和文本列。]

更有效的方法是

在表上创建聚集索引。如果表已经有聚集索引,您可以使用 CREATE INDEX 命令的 WITH DROP_EXISTING 子句重新创建聚集索引并将其移动到特定文件组。当表有聚集索引时,索引的叶级和表的数据页本质上是一回事。该表必须存在于聚集索引所在的位置,因此如果您创建或重新创建聚集索引(将索引放在特定文件组上),您也将表移动到新文件组。

信用:布赖恩莫兰

您可以创建(或重新创建)为 ON 子句指定新文件组的聚集索引,这将移动表(数据)。但是,如果您有非聚集索引并希望它们在另一个文件组上,则必须删除并重新创建它们,同时在 ON 子句中指定新文件组。参考

于 2009-04-03T03:36:21.570 回答
0

我同意马克的观点。重建集群效果很好, 比 Tasks->Shrink Database->Files->快得多Empty file by migrating data to another file.

单独创建索引允许控制系统上的负载,而无需从select * into [your.new.table.] from .....

于 2012-03-29T13:39:20.763 回答