DBCC INDEXDEFRAG (Transact-SQL)

Mis à jour : 14 avril 2006

Défragmente les index de la table ou de la vue spécifiée.

ms177571.note(fr-fr,SQL.90).gifImportant :
Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt ALTER INDEX.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

DBCC INDEXDEFRAG
(
    { database_name | database_id | 0 } 
        , { table_name | table_id | view_name | view_id } 
    [ , { index_name | index_id } [ , { partition_number | 0 } ] ]
)
    [ WITH NO_INFOMSGS ] 

Arguments

  • database_name | database_id | 0
    Base de données sur laquelle un index doit être défragmenté. Si 0 est spécifié, la base de données actuelle est utilisée. Les noms de base de données doivent suivre les règles applicables aux identificateurs.
  • table_name | table_id | view_name | view_id
    Table ou vue dans laquelle un index doit être défragmenté. Le nom des tables et des vues doit suivre les règles applicables aux identificateurs.
  • index_name | index_id
    Nom de l'ID de l'index à défragmenter. Si aucun ID n'est spécifié, l'instruction défragmente tous les index pour la table ou la vue indiquées. Les noms d'index doivent suivre les règles applicables aux identificateurs.
  • partition_number | 0
    Numéro de la partition de l'index à défragmenter. S'il n'est pas spécifié ou si la valeur 0 est spécifié, l'instruction défragmente toutes les partitions dans l'index indiqué.
  • WITH NO_INFOMSGS
    Supprime tous les messages d'information dont les niveaux de gravité sont compris entre 0 et 10.

Jeux de résultats

DBCC INDEXDEFRAG retourne le jeu de résultats suivant (les valeurs peuvent varier) si un index est spécifié dans une instruction (sauf si WITH NO_INFOMSGS est défini) :

Pages Scanned Pages Moved Pages Removed
------------- ----------- -------------
359           346         8

(1 row(s) affected)

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Notes

DBCC INDEXDEFRAG défragmente un index au niveau feuille afin que l'ordre physique des pages corresponde à l'ordre logique (de gauche à droite) des nœuds feuilles, améliorant ainsi les performances d'analyse de l'index.

ms177571.note(fr-fr,SQL.90).gifRemarque :
Lors de l'exécution de DBCC INDEXDEFRAG, la défragmentation de l'index se produit par séries. Cela signifie que l'opération est effectuée sur un seul index à l'aide d'un thread unique. Il n'y a aucun parallélisme. En outre, les opérations sur plusieurs index sont effectuées à partir de la même instruction DBCC INDEXDEFRAG, sur un index à la fois.

DBCC INDEXDEFRAG compacte également les pages d'un index, en tenant compte du facteur de remplissage spécifié lors de la création de l'index. Toute page vide issue de ce compactage est supprimée. Pour plus d'informations, consultez Taux de remplissage.

Si un index s'étend sur plusieurs fichiers, DBCC INDEXDEFRAG défragmente un fichier à la fois. Les pages ne migrent pas d'un fichier à l'autre.

Toutes les cinq minutes, DBCC INDEXDEFRAG fait une estimation du pourcentage d'achèvement dans un rapport. DBCC INDEXDEFRAG peut être arrêté à tout moment et n'importe quel travail alors achevé sera conservé.

À l'inverse de DBCC DBREINDEX ou de la génération d'index en règle générale, DBCC INDEXDEFRAG est une opération en ligne. En effet, les verrous ne sont pas maintenus à long terme. Ainsi, DBCC INDEXDEFRAG ne bloque pas les requêtes ou les mises à jour en cours d'exécution. Un index relativement non fragmenté peut être défragmenté plus rapidement que la construction d'un nouvel index, car le temps de défragmentation dépend du volume de fragmentation. Un index très fragmenté peut être sensiblement plus long à défragmenter qu'à reconstruire.

La défragmentation est toujours complètement enregistrée, quel que soit le paramètre du mode de récupération de la base de données. Pour plus d'informations, consultez ALTER DATABASE (Transact-SQL). La défragmentation d'un index très fragmenté peut générer un journal plus important que la création d'un index complètement enregistré. Toutefois, la défragmentation s'effectue sous la forme d'une série de transactions courtes et ne requiert pas un journal volumineux si des sauvegardes du journal sont effectuées fréquemment ou que le paramètre du mode de récupération est SIMPLE.

DBCC INDEXDEFRAG mélange les pages feuilles de l'index en place. Ainsi, si un index est entrelacé avec d'autres sur le disque, l'exécution de DBCC INDEXDEFRAG sur cet index ne rend pas toutes ses pages feuilles contiguës. Pour améliorer le clustering des pages, régénérez l'index.

DBCC INDEXDEFRAG ne peut pas être utilisé pour défragmenter un index désactivé ou un index dont le verrouillage de page est désactivé. DBCC INDEXDEFRAG n'est pas géré pour une utilisation sur les tables système.

Autorisations

L'appelant doit être propriétaire de la table ou être membre du rôle de serveur fixe sysadmin, du rôle de base de données fixe db_owner ou du rôle de base de données fixe db_ddladmin.

Exemples

L'exemple suivant défragmente toutes les partitions de l'index PK_Product_ProductID dans la table Production.Product de la base de données AdventureWorks.

DBCC INDEXDEFRAG (AdventureWorks, "Production.Product", PK_Product_ProductID)
GO

Voir aussi

Référence

DBCC (Transact-SQL)
sys.dm_db_index_physical_stats
CREATE TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL)
ALTER INDEX (Transact-SQL)

Autres ressources

Architecture des tables et des index

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

14 avril 2006

Contenu modifié :
  • Correction de la syntaxe pour indiquer que l'index et le numéro de partition sont facultatifs.