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.


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.


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).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.