REBUILD - Índice agrupado, TABELA ou ambos?

9

Estou tendo problemas para encontrar um recurso definitivo sobre isso em qualquer lugar, por isso espero que um guru possa me dar uma resposta aqui.

Eu tenho uma tabela muito grande na qual tivemos que adicionar uma coluna. O índice clusterizado é bastante fragmentado e eu quero fazer um ALTER INDEX REBUILDpara limpá-lo.

Também normalmente faço um ALTER TABLE REBUILDquando altero as colunas, pois isso limpa qualquer ponteiro ou divisão dessa operação.

Preciso fazer as duas coisas, pois estamos falando de um índice clusterizado, que é essencialmente a tabela?

Minha suspeita é que o ALTER INDEX REBUILDcluster não atualizará tudo o que ALTER TABLEfor necessário, mas também tenho medo de que ALTER TABLEnão limpe a fragmentação do índice.

JNK
fonte
A reconstrução do IIRC não atualizará as estatísticas da coluna. Dúvida que é relevante, pois não acontecerá em nenhum dos casos. :-)
Aaron Bertrand

Respostas:

6

Se você reconstruir o índice em cluster, não haverá necessidade de reconstruir a tabela. Se a tabela era uma pilha (não tinha um índice em cluster), convém reconstruí-la.

Mrdenny
fonte
Eu li anteriormente que quando você remove uma coluna, é necessário fazer um, ALTER TABLE REBUILDpois isso corrigirá ponteiros não corrigidos na reconstrução do índice. Não é mais esse o caso?
JNK
Quais indicadores? Eu nunca ouvi isso. A remoção de uma coluna não tem qualquer ponteiros, a menos que você está falando TEXT, NTEXT, tipos de dados de imagem em SQL 2000.
mrdenny
11
Eu acho que as minhas preocupações são infundadas então ...
JNK
@JNK: Eu suspeito que você queira dizer DBCC CLEANTABLE ao soltar colunas que é o mesmo que reconstruir o índice clusterizado stackoverflow.com/a/808368/27535 e dba.stackexchange.com/search?q=%2BDBCC+%2BCLEANTABLE
gbn
0

Reconstruir descarta e recria o índice. Quando você cria um índice em cluster, ele reordena as linhas de uma tabela , além de criar o CIX (uma tabela sem o CIX é um heap).

Eric Higgins
fonte
4
A reconstrução não descarta e recria o índice em cluster. Eliminar o índice em cluster transforma a tabela em um heap. Se a reconstrução fosse descartada e recriada, haveria um estado intermediário no qual a tabela é um heap, o que não é verdade. Se você não acredita que não há estágio de heap intermediário, considere que, se esse estado de heap intermediário fosse alcançado, o 'recriar' exigiria uma classificação, mas uma rápida olhada no plano de execução de reconstrução revela que não há classificação.
Remus Rusanu
Atenciosamente, RR, eu gosto de ler suas postagens, mas não sei por que você argumentaria nesse ponto. Eu já vinculei o MSDN oficial. Na seção "Reconstruindo índices", na metade do caminho, primeira instrução: "Reconstruir um índice cai e recria o índice". Não há ambiguidade nessa afirmação. Aqui está novamente: msdn.microsoft.com/en-us/library/ms188388.aspx
Eric Higgins
11
O BOL e o MSDN podem ter poucas opções de redação de vez em quando, e repetidas vezes ... Esse seria o caso.
Remus Rusanu