今天,我与一位客户遇到了多维数据集处理性能问题。因此,我开始了逐步的故障排除,包括优化命名查询。在某些情况下,命名查询实际上是在从源数据仓库中查询某些SQL视图。
毕竟,我创建了约35个新索引,并且需要证明所有这些索引都已真正使用。在逐步的故障排除过程中,我多次处理有问题的多维数据集时,似乎所有这些索引都已使用。
但是,我知道我创建了一些新索引涵盖的索引,并且这些索引赢得了’t be used.
我需要重建所有索引,但是,从SSMS UI重建所有这些索引会很痛苦。因此,我需要进行批量索引重建。
所以我用谷歌搜索’我们已经找到了一些实际上可以完成任务的脚本,但是它们都使用了游标。可悲的是,我讨厌游标,所以它们是我书中的最后一项。的确,我’直到它永远不会使用游标’绝对必要,没有其他更好的选择。
因此,我决定以自己的方式进行操作,并编写了以下脚本。我以为我’d很乐意与大家分享它,因为它也可能对某些人有所帮助。
宣布 @ix varchar(最高), @tbl varchar(最高), @计数器 整型, @CustomIx Varchar(最高)
宣布 @表 表 (ID 整型, tbl varchar(最高), ix varchar(最高))
组 @CustomIx = ‘YOUR_INDEX_NAME_STARS_WITH’ –自定义索引名称将类似于MY_IX _ ***
插 进入 @表 (ID, tbl, ix)
选择 ROW_NUMBER() 过度 (订购 通过 ix.[名称]) ID
, OBJECT_NAME(ixstat.[OBJECT_ID]) 如 [对象名称]
, ix.[名称] 如 [索引名称]
从 系统.DM_DB_INDEX_USAGE_STATS 如 ixstat
内 加入 系统.索引 如 ix
上 ix.[OBJECT_ID] = ixstat.[OBJECT_ID]
和 ix.INDEX_ID = ixstat.INDEX_ID
哪里 对象属性(ixstat.[OBJECT_ID],‘IsUserTable’) = 1
和 ix.[名称] 喜欢 @CustomIx+‘%’
组 @计数器= (选择 最高(ID) 从 @表)
而 @计数器 >=1
开始
组 @ix = (选择 ix 从 @表 哪里 ID = @计数器)
组 @tbl = (选择 tbl 从 @表 哪里 ID = @计数器)
执行(‘ALTER INDEX ‘+@ix+‘ 上 [dbo].[‘+@tbl+‘]重建分区=全部‘)
打印 @tbl + ‘.’ + @ix + ‘ Rebuild successful’
组 @计数器-=1
结束
继续阅读 “不使用游标的批索引重建” →