在SQL Server 2008中,我想将数据库中的所有非聚集索引移动到辅助文件组。最简单的方法是什么?
答案 0 :(得分:23)
运行此updated script以创建名为MoveIndexToFileGroup
的存储过程。此过程将表上的所有非聚簇索引移动到指定的文件组。它甚至支持其他一些脚本没有的INCLUDE
列。此外,它不会重建或移动已在所需文件组上的索引。创建过程后,请按以下方式调用:
EXEC MoveIndexToFileGroup @DBName = '<your database name>',
@SchemaName = '<schema name that defaults to dbo>',
@ObjectNameList = '<a table or list of tables>',
@IndexName = '<an index or NULL for all of them>',
@FileGroupName = '<the target file group>';
要创建一个脚本,为数据库中的每个表运行此脚本,请将查询输出切换为文本,然后运行:
SELECT 'EXEC MoveIndexToFileGroup '''
+TABLE_CATALOG+''','''
+TABLE_SCHEMA+''','''
+TABLE_NAME+''',NULL,''the target file group'';'
+char(13)+char(10)
+'GO'+char(13)+char(10)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_SCHEMA, TABLE_NAME;
有关详细信息,请参阅原始blog。我没有写这个程序,但根据博客的回复更新了它,并确认它适用于SQL Server 2005和2008.
IGNORE_DUP_KEY
选项时,该过程失败。暂无法解决这个问题。答案 1 :(得分:5)
编写脚本,更改ON子句,删除它们,重新运行新脚本。真的没有别的选择。
幸运的是,Interwebs上有一些脚本,例如one,它将为您处理脚本。