Estou usando a seguinte consulta para verificar a fragmentação do índice em uma tabela. Cada índice retorna 3 linhas e cada uma tem um valor diferente para "avg_fragmentation_in_percent". A segunda linha parece ser o valor exato quando verifico a fragmentação do índice por meio do menu Propriedades do índice real.
Estou curioso sobre os outros valores que são retornados porque uma linha diz 100% de fragmentação e outra linha diz 0% de fragmentação. Alguém tem ideia do porque estou vendo isso?
DECLARE @db_id SMALLINT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'wfm');
SET @object_id = OBJECT_ID(N'wfm.dbo.Lab_Employee_Time_Off');
IF @db_id IS NULL
BEGIN;
PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
PRINT N'Invalid object';
END;
ELSE
BEGIN;
SELECT OBJECT_NAME(ips.OBJECT_ID) AS 'TableName'
,i.NAME AS 'IndexName'
,ips.index_id
,ips.index_type_desc
,ips.avg_fragmentation_in_percent
,ips.avg_page_space_used_in_percent
,ips.page_count
FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL, 'DETAILED') ips
INNER JOIN sys.indexes i ON (ips.object_id = i.object_id)
AND (ips.index_id = i.index_id)
ORDER BY i.name, avg_fragmentation_in_percent DESC
END;
GO
Há uma linha para cada nível no índice (adicione
ips.index_level
à saída e você verá que há uma linha para cada nível).Sua consulta provavelmente deve simplesmente filtrar qualquer linha com uma contagem baixa de páginas (digamos, 1000), o que eliminará tudo, exceto o nível 0 na maioria dos casos.