Quando um índice é desativado, a definição permanece no catálogo do sistema, mas não é mais usada. O SQL Server não mantém o índice (conforme os dados na tabela são alterados) e o índice não pode ser usado para atender a consultas. Se um índice clusterizado for desabilitado, toda a tabela ficará inacessível.
Por que não é possível acessar os dados diretamente da tabela descartando a B-tree? (provavelmente verificando a tabela linha por linha) Isso não seria mais apropriado do que tornar os dados completamente inacessíveis?
É uma questão puramente teórica - eu nunca faria isso. Não é um cenário, nem uma coisa a fazer, só quero saber por que as coisas acontecem assim, considere uma questão interna.
por que não é possível acessar os dados diretamente da tabela descartando a B-tree? (provavelmente verificando a tabela linha por linha) isso não seria mais apropriado do que dados inacessíveis?
Para responder à sua pergunta, os fundamentos da indexação são mais úteis -- Um índice é composto de um conjunto de páginas (nós de índice) organizadas em uma estrutura de árvore B. Essa estrutura é hierárquica por natureza, com o nó raiz no topo da hierarquia e os nós folha na parte inferior. Para mais detalhes, consulte aqui .
Além disso, como muitas pessoas descreveram, índices agrupados == tabelas originais que são ordenadas fisicamente com uma ou mais chaves ou colunas. Portanto, quando um índice clusterizado é desabilitado, suas linhas de dados não podem ser acessadas. Você não poderá inserir nenhum dado (para índice não agrupado, a inserção será bem-sucedida - mas isso não está totalmente relacionado a esta postagem - pois aqui a discussão é sobre índice agrupado) ou nenhuma operação de reorganização funcionará.
Abaixo vou te explicar em detalhes:
usaremos o banco de dados Adventureworks para ver o efeito da desativação do índice CLUSTERED .
Agora verifique a contagem de linhas na tabela:
Agora desative o índice clusterizado
Agora selecione a contagem de linhas da tabela. Desta vez, ocorrerá um erro com a mensagem abaixo:
Mesmo a operação de reorganização não funciona !!
Agora reconstrua o Clustered Index e ele deve funcionar bem.
Selecione a tabela para ver se podemos acessar os dados
Portanto, o resultado final é que, se desabilitarmos o índice clusterizado, os dados na tabela ainda existirão, mas não estarão acessíveis para nada além das operações Drop ou REBUILD. Todos os índices e exibições não agrupados relacionados estarão indisponíveis, bem como as chaves estrangeiras que fazem referência à tabela serão desabilitadas e, portanto, levando a FALHA para todas as consultas que fazem referência à tabela.
Nota: Não há opção para HABILITAR o Índice. Você tem que RECONSTRUIR.
O nível folha da árvore B+ é a tabela. O que você espera conseguir desabilitando o CI? Só não faça isso se não quiser que os dados fiquem inacessíveis.
Não sei ao certo por que o SQL Server permite que você faça isso.
...também desativa o NCI, portanto, mesmo as
SELECT
consultas que seriam cobertas por ele são desativadas. Não consigo pensar em nenhum caso de uso para isso. - martin-smithO único uso que consigo pensar é exatamente o que está sendo discutido. Desativando uma tabela. Se você tiver uma tabela que não deseja que ninguém toque, mesmo
dbo
ousysadmin
, poderá desativar o índice clusterizado. A tabela existe junto com os dados, mas fica completamente inacessível até que você reative o índice clusterizado. - kenneth-fisher