加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 将所有非群集索引移动到SQL Server中的另一个文件

发布时间:2020-12-12 16:15:27 所属栏目:MsSql教程 来源:网络整理
导读:在SQL Server 2008中,我想将DB中的所有非群集索引移动到辅助文件组.最简单的方法是什么? 解决方法 运行此 updated script创建一个名为MoveIndexToFileGroup的存储过程.此过程将表上的所有非聚集索引移动到指定的文件组.它甚至支持一些其他脚本不包含INCLUDE
在SQL Server 2008中,我想将DB中的所有非群集索引移动到辅助文件组.最简单的方法是什么?

解决方法

运行此 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上运行.

更新

> @psteffek modified the script在SQL Server 2012上工作.我合并了他的更改.
>当表中有IGNORE_DUP_KEY选项时,程序将失败.没有修复这个.
> @srutzky指出,该过程不保证保留索引的顺序,并提出如何解决它的建议.我相应地更新了程序.
> ojiNY注意到过程中没有列出过滤器(与SQL 2005兼容).根据他的建议,我把他们加入了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读