Se eu tiver um índice de coluna única clusterizado, por exemplo, FooId
no SQL Server 2008, 2012 e sei que baguncei a ordem das linhas para não ter mais ordem sequencial da FooId
coluna, quais comandos devem ser usados:
- Atualizar estatísticas
- Reconstruir
- Reorganizar
EDITAR
O cenário
FooId
é um pk clusterizado do tipo identificador único sequencial, mas para simplificar este post, usamos #1 como valores de id.
#1 inserted
#2 inserted
#3 inserted
#1 selected
#1 deleted
#2 selected
#2 deleted
#2 inserted
(que está reutilizando o PK agrupado de #1)
#1 inserted
(que está reutilizando o PK agrupado de #1)
Isso não vai quebrar a ordem sequencial? Não será armazenado assim agora:
#3
#2
#1
//Daniel
Você pode ter entendido mal a maneira como um índice clusterizado funciona - por definição, os dados são ordenados logicamente na sequência da chave de clustering, embora seja possível que o índice clusterizado se torne fisicamente fragmentado à medida que ocorrem divisões de página quando novos dados são inseridos.
Se você deseja reduzir a fragmentação,
REBUILD
ouREORGANIZE
pode ser apropriado. A regra geral é não fazer nada quando a fragmentação estiver abaixo de 5%,REORGANIZE
quando a fragmentação estiver entre 5% e 30% eREBUILD
quando a fragmentação estiver acima de 30%.A fragmentação do índice é registrada no DMV sys.dm_db_index_physical_stats . Consulte também a página do MSDN em
REBUILD/REORGANIZE
Vale a pena notar que, a menos que você esteja executando o SQL Server Enterprise Edition,
REBUILD
não pode ser executado on-line - o que significa que sua tabela ficará inacessível durante o comando.REORGANIZE
é sempre feito online.