我将在Server中重建我们的索引,因为我们对所有表的所有索引的分割率都很高。我也应该包括重建非聚集索引吗?还是重建聚集索引就足够了?
谢谢!
发布于 2021-05-31 12:02:40
在大多数情况下,您的非聚集索引是在事实之后添加的,以处理某个查询,这对于您的业务/应用程序可能非常重要。与往常一样,答案是,它取决于使用索引的查询的重要性(不管它是聚集在非聚集的)。
如果可以,将数据库还原到开发服务器,并从IndexOptimize.sql运行3xOlaHallengren脚本( CommandExecute.sql和CommandLog.sql)。
一旦部署完毕,您就可以运行这个脚本。
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'如果您对运行时间很满意,而且数据库日志没有增长太多,那么在允许的维护窗口期间,在生产环境中运行相同的部署以及上面的脚本。
除此之外,您还可以运行以下脚本,以检查在重新组织/重建索引之前索引有多分散。
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]https://dba.stackexchange.com/questions/292531
复制相似问题