首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应该在非聚集索引中重建索引吗?

应该在非聚集索引中重建索引吗?
EN

Database Administration用户
提问于 2021-05-31 10:51:01
回答 1查看 444关注 0票数 1

我将在Server中重建我们的索引,因为我们对所有表的所有索引的分割率都很高。我也应该包括重建非聚集索引吗?还是重建聚集索引就足够了?

谢谢!

EN

回答 1

Database Administration用户

回答已采纳

发布于 2021-05-31 12:02:40

在大多数情况下,您的非聚集索引是在事实之后添加的,以处理某个查询,这对于您的业务/应用程序可能非常重要。与往常一样,答案是,它取决于使用索引的查询的重要性(不管它是聚集在非聚集的)。

如果可以,将数据库还原到开发服务器,并从IndexOptimize.sql运行3xOlaHallengren脚本( CommandExecute.sql和CommandLog.sql)。

一旦部署完毕,您就可以运行这个脚本。

代码语言:javascript
复制
EXECUTE dbo.IndexOptimize
    @Databases = 'ALL_Databases',
    @FragmentationLow = NULL,
    @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
    @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
    @FragmentationLevel1 = 10,
    @FragmentationLevel2 = 30,
    @PartitionLevel = 'Y',
    @MaxDOP = 0,
    @UpdateStatistics = 'ALL',
    @OnlyModifiedStatistics = 'Y',
    @LogToTable = 'Y',
    @Indexes = 'ALL_INDEXES'

如果您对运行时间很满意,而且数据库日志没有增长太多,那么在允许的维护窗口期间,在生产环境中运行相同的部署以及上面的脚本。

除此之外,您还可以运行以下脚本,以检查在重新组织/重建索引之前索引有多分散。

代码语言:javascript
复制
SELECT  [ID]
      , [StartTime]
      , [DatabaseName]
      , [ObjectName] = [SchemaName] + '.' + [ObjectName]
      , [IndexName]
      , [PartitionNumber]
      , [SizeMB] = ExtendedInfo.value('(/ExtendedInfo/PageCount)[1]', 'int') /128
      , Fragmentation = ExtendedInfo.value('(/ExtendedInfo/Fragmentation)[1]', 'decimal(10,1)')
      , [Duration(s)] = DATEDIFF(SECOND, [StartTime],[EndTime])
      , [Command]
FROM [dbo].[CommandLog]
WHERE CommandType NOT IN ('UPDATE_STATISTICS')          --only disply index defragmentation information
ORDER BY [StartTime]
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/292531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档