web-dev-qa-db-fra.com

Pourquoi la désactivation d'un index en cluster rend la table inaccessible?

Lorsqu'un indice est désactivé, la définition reste dans le catalogue système mais n'est plus utilisée. SQL Server ne conserve pas l'index (comme des données dans le tableau change) et l'index ne peut pas être utilisé pour satisfaire les requêtes. Si A Index en cluster est désactivé, la table entière devient inaccessible.

Pourquoi n'est-il pas possible d'accéder directement aux données de la table qui éliminant l'arbre B? (Très probablement en balayant la rangée de la table à la ligne) ne serait-il pas plus approprié que de rendre les données totalement inaccessibles?

C'est une question purement théorique - je ne ferais jamais cela. Ce n'est pas un scénario, ni une chose à faire, je veux juste savoir pourquoi la chose va de cette façon, considérez-la une question de communes.

11
Tawfik Khalifeh

Pourquoi n'est-il pas possible d'accéder directement aux données de la table qui éliminant l'arbre B? (très probablement en balayant la rangée de la table à la ligne) ne serait pas plus approprié que des données inaccessibles du tout ?

Pour répondre à votre question, l'indexation des bases est plus pratique - un indice est composé d'un ensemble de pages (noeuds d'index) organisés dans une structure B-Tree. Cette structure est de nature hiérarchique, avec le nœud racine situé au sommet de la hiérarchie et des nœuds de feuilles en bas. Pour plus de détails, voir ici .

En outre, autant de personnes ont décrit, des index clusters == des tables d'origine physiquement commandées avec une ou plusieurs touches ou colonnes. Ainsi, lorsqu'un indice en cluster est désactivé, ses lignes de données ne peuvent pas être consultées. Vous ne serez pas en mesure d'insérer des données (pour index non clusterés, l'insert réussira - mais cela n'est pas entièrement lié à ce post - comme ici la discussion est d'index en cluster) ou de ne pas réorganisera l'opération.

Vous trouverez ci-dessous vous expliquer en détail:

nous utiliserons la base de données AventureWorks pour voir l'effet de la désactivation du [~ # ~] regroupée [~ # ~] Index.

enter image description here

Maintenant, vérifiez le nombre de lignes dans la table:

enter image description here

Maintenant désactiver l'index en cluster

enter image description here

Maintenant, sélectionnez le nombre de lignes dans la table. Cette fois, il sera erroné avec le message ci-dessous:

enter image description here

Même l'opération de réorganisation ne fonctionne pas !!

enter image description here

Maintenant, reconstruisez l'index en clustered et cela devrait fonctionner correctement.

enter image description here

Sélectionnez la table pour voir si nous pouvons accéder aux données

enter image description here

Donc, la ligne finale est que, si nous désactivons l'indice en cluster, puis les données dans le tableau existe toujours, mais ne seront pas accessibles à autre chose que les opérations de chute ou de reconstruction. Tous les index et vues non clusters associés seront indisponibles ainsi que les touches étrangères faisant référence à la table seront désactivées et là-bas en conduisant la défaillance de toutes les requêtes qui font référence à la table.

Remarque: Il n'y a aucune option pour activer l'index. Vous devez le reconstruire.

10
Kin Shah