Désactivation d'index

En désactivant un index, vous empêchez les utilisateurs d'accéder à cet index et, dans le cas d'index cluster, d'accéder aux données sous-jacentes. La définition de l'index reste présente dans les métadonnées et les statistiques sont conservées sur les index non-cluster. Désactiver un index, qu'il soit non-cluster ou cluster, sur une vue supprime physiquement les données de l'index. La désactivation d'un index cluster sur une table empêche l'accès aux données de celle-ci ; ces dernières existent toujours dans la table, mais les opérations DML ne peuvent pas les utiliser tant que l'index n'est pas supprimé ou reconstruit. Pour reconstruire et activer un index précédemment désactivé, utilisez l'instruction ALTER INDEX REBUILD ou CREATE INDEX WITH DROP_EXISTING.

La désactivation d'un ou de plusieurs index peut se produire dans les cas suivants :

  • Le Moteur de base de données SQL Server désactive automatiquement l'index lors d'une mise à niveau de SQL Server.

  • Vous désactivez l'index manuellement à l'aide de l'instruction ALTER INDEX.

La mise à niveau de SQL Server désactive un index

Au cours de la mise à niveau de SQL Server ou d'un Service Pack pour SQL Server, le Moteur de base de données identifie automatiquement et désactive les index, y compris les index des vues, lorsque la définition de l'index ou de la vue comprend un des éléments suivants :

  • Une expression pour laquelle le Moteur de base de données ne peut plus garantir l'intégrité des données de l'index.

    Par exemple : un index utilise une fonction système qui a été modifiée dans la mise à niveau et il renvoie désormais un résultat différent. Le Moteur de base de données va désactiver cet index lors de la mise à niveau parce qu'il peut contenir des données qui ne seraient plus valides après la mise à niveau.

  • Un classement modifié dans le cadre de la mise à jour fait que l'index n'est plus trié correctement.

Quand un index est désactivé pendant le processus de mise à niveau, un message d'avertissement vous indique le nom de l'index et les noms des contraintes éventuellement associées pour que vous puissiez effectuer la reconstruction après la mise à niveau. La reconstruction de l'index et l'activation des contraintes associées vont corriger les données invalidées pendant la mise à niveau.

Une contrainte CHECK peut être désactivée si la définition contient une expression pour laquelle le Moteur de base de données ne peut plus garantir l'intégrité des données. Pour activer cette contrainte, utilisez l'instruction ALTER TABLE CHECK.

Utilisation de ALTER INDEX pour désactiver un index

Vous pouvez à tout moment désactiver un index manuellement, à l'aide de l'instruction ALTER INDEX DISABLE.

[!REMARQUE]

Si une table se trouve dans une publication de réplication transactionnelle, vous ne pouvez pas désactiver les index associés aux colonnes de clé primaire. Ces index sont nécessaires à la réplication. Pour désactiver un index, vous devez au préalable supprimer la table dans la publication. Pour plus d'informations, consultez Publication de données et d'objets de base de données.

Vous pouvez être amené à désactiver un index pour effectuer les tâches suivantes :

  • Corriger une erreur d'E/S disque (erreur 823 ou 824) sur une page d'index et reconstruire l'index ultérieurement.

  • Supprimer temporairement l'index pour résoudre des problèmes.

  • Reconstruire des index non-cluster.

    Quand un index non-cluster n'est pas désactivé, l'opération de reconstruction requiert une quantité d'espace disque temporaire suffisante pour stocker à la fois l'ancien index et le nouveau. Cependant, en désactivant et en reconstruisant un index non-cluster dans des transactions distinctes, l'espace disque rendu disponible grâce à la désactivation de l'index peut être réutilisé pour l'opération suivante de reconstruction ou pour toute autre opération. Aucun espace supplémentaire n'est requis, à part l'espace disque temporaire nécessaire au tri, soit en principe 20 % de la taille de l'index.

    Si l'espace disque est limité, il peut être utile de désactiver l'index non-cluster avant de le reconstruire. Par exemple, supposez que vous avez une procédure stockée qui reconstruit tous les index non-cluster dans une ou plusieurs tables. En désactivant d'abord ces index dans une transaction distincte de l'opération de reconstruction, vous pouvez considérablement réduire la quantité d'espace disque temporaire nécessaire à leur reconstruction.

Pour désactiver un index

ALTER INDEX (Transact-SQL)

Procédure : reconstruction d'un index (SQL Server Management Studio)