Depois que alguém reconstrói seus índices do SQL Server usando compactação de página ( ALTER INDEX IX1 REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)
), as recompilações subsequentes (como feitas por alguns scripts de manutenção após um determinado limite de fragmentação) precisam especificar a compactação de dados novamente? Caso contrário, os índices seriam efetivamente descompactados?
Os índices permanecem compactados ao reconstruí-los/reorganizá-los.
Criar tabela e índice compactado
Verificar compactação
Resultado
Reconstruir o índice
Verificar compactação
Resultado
Desabilitar e depois reconstruir tem um resultado diferente, já que desabilitar remove o índice, enquanto mantém a definição do índice.
Resultado
A compactação foi perdida, a definição de compactação também seria perdida ao descartar e criar o índice via SSMS sem adaptar o script de criação de índice.
Por quê?
Porque a opção data_compression não é mantida ao criar scripts da instrução Index create.
no entanto, se desabilitarmos o index , reconstrua com compactação e reconstrua novamente:
Resultado
Testando uma reconstrução com a solução de manutenção da Ola hallengren
Os parâmetros são modificados para fins de teste.
Adicione alguns dados para chegar a uma página, pois é necessário para o parâmetro MinNumberOfPages.
Execute o proc de otimização de índice para imprimir a instrução.
Resultado:
Executando o comando gerado
A compressão é mantida
Testando uma reconstrução com um plano de manutenção (eu defenderia fortemente a solução da ola)
Recriar índices
Escolha a mesa de teste
Adicione alguns níveis de fragmentação de teste.
Insira alguns valores para iniciar a fragmentação
Verifique a porcentagem de fragmentação
Resultado
Execute o plano
A parte interessante aqui, ao olhar para o relatório do plano, é que a
DATA_COMPRESSION = PAGE
opção é adicionada aoREBUILD
comando gerado!Fragmentação:
Compressão: