0

我有大约 300 个表,它们位于不同的分区中,现在这些表不再用于存储如此庞大的数据。现在,我不时遇到空间问题,其中一些但有价值的空间被为这些表创建的 150 个文件组占用,所以我想将表的文件组更改为任何一个而不是 150 FG,并通过删除这些文件组来释放空间.

仅供参考:这些表现在不包含任何数据,但定义了许多约束和索引。

您能否建议我,如何有效地完成它?

4

2 回答 2

1

要移动表,删除然后重新创建它的聚集索引,指定新的 FG。如果它没有聚集索引,则创建一个然后删除它。

最佳做法是不要将用户数据保留在主 FG 上。将其留给系统对象,并将您的数据放在其他文件组中。但是很多人都忽略了这个...

于 2016-12-02T09:14:12.987 回答
0

我发现了一些关于更改现有表的 FG 组的方法的更多信息:

1- 使用 NEW_FG 在每个对象中定义聚集索引(在@under 答案中提到)

CREATE UNIQUE CLUSTERED INDEX <INDEX_NAME> ON dbo.<TABLE_NAME>(<COLUMN_NAME>) ON [FG_NAME]

2-如果我们无法定义聚集索引,则将表和数据结构复制到新表,删除旧表并将新表重命名为旧表,如下所示

将数据库的默认 FG 更改为 NEW_FG,以便可以使用 INTO 创建每个表,默认情况下在该新 FG 下

ALTER DATABASE <DATABASE> MODIFY FILEGROUP [FG_NAME] DEFAULT

IF OBJECT_ID('table1') IS NOT NULL 
BEGIN
    SELECT * INTO table1_bkp FROM table1
    DROP TABLE table1
    EXEC sp_rename table1_bkp, table1
END

全部操作后数据库的默认FG和以前一样

ALTER DATABASE <DATABASE> MODIFY FILEGROUP [PRIMARY] DEFAULT

3- 如果可行,删除表,然后使用 NEW_FG 再次创建它

DROP TABLE table1 
CREATE TABLE [table1] ( 
    id int,
    name nvarchar(50),
    --------
) ON [NEW_FG] 
于 2016-12-13T13:09:40.063 回答