我有大约300个表位于不同的分区,现在这些表没有用于如此庞大的数据。现在,我不时地获得空间问题,并且为这些表创建的150个文件组占用了一些宝贵的空间,因此我想将表的文件组更改为任何一个而不是150 FG并释放空间删除这些文件组。
仅供参考:这些表现在没有保留任何数据,但定义了许多约束和索引。
您能否建议我,如何有效地完成工作?
答案 0 :(得分:1)
要移动表,请删除然后重新创建指定新FG的聚簇索引。如果它没有聚集索引,请创建一个然后删除它。
最佳做法是不将用户数据保留在主FG上。保留系统对象,并将数据放在其他文件组中。但是很多人都忽略了这一点......
答案 1 :(得分:0)
我发现有关更改现有表的FG组的方法的更多信息:
1-使用NEW_FG在每个对象中定义聚簇索引(在@under answer中提及)
CREATE UNIQUE CLUSTERED INDEX <INDEX_NAME> ON dbo.<TABLE_NAME>(<COLUMN_NAME>) ON [FG_NAME]
2-如果我们无法定义聚簇索引,那么将表和数据结构复制到新表,删除旧的并将new重命名为old,如下所示
将数据库的默认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]