Partager via


Suppression de toutes les lignes à l'aide de l'instruction TRUNCATE TABLE

L'instruction TRUNCATE TABLE est une méthode rapide et efficace qui permet de supprimer toutes les lignes d'une table. TRUNCATE TABLE est semblable à l'instruction DELETE sans clause WHERE. Toutefois,TRUNCATE TABLE est plus rapide et utilise moins de ressources du système et du journal des transactions.

L'instruction TRUNCATE TABLE présente les avantages suivants par rapport à l'instruction DELETE :

  • L'instruction TRUNCATE TABLE utilise moins d'espace dans le journal des transactions.

    L'instruction DELETE supprime une ligne à la fois et enregistre une entrée dans le journal des transactions pour chaque ligne supprimée. L'instruction TRUNCATE TABLE supprime les données en désallouant les pages de données utilisées pour stocker les données de la table et enregistre uniquement les désallocations de page dans le journal des transactions.

  • En général, moins de verrous sont utilisés.

    Lorsque l'instruction DELETE est exécutée à l'aide d'un verrou de ligne, chaque ligne de la table est verrouillée en vue d'une suppression. L'instruction TRUNCATE TABLE verrouille toujours la table et la page, mais pas chaque ligne.

  • Sans exception, il ne reste aucune page dans la table.

    Une fois qu'une instruction DELETE a été exécutée, la table peut toujours contenir des pages vides. Par exemple, des pages vides dans un segment ne peuvent pas être libérées sans au moins un verrou de table exclusif (LCK_M_X). Si l'opération de suppression n'utilise pas de verrou de table, la table (segment) contiendra de nombreuses pages vides. Pour les index, l'opération de suppression peut laisser des pages vides ; ces pages peuvent toutefois être libérées rapidement par un processus de nettoyage en arrière-plan.

Tout comme avec l'instruction DELETE, la définition d'une table vidée au moyen de l'instruction TRUNCATE TABLE reste dans la base de données, avec ses index et les autres objets qui lui sont associés. Si la table contient une colonne d'identité, le compteur de cette colonne est réinitialisé à sa valeur de départ. Si aucune valeur de départ n'est définie, la valeur par défaut 1 est utilisée. Pour conserver le compteur d'identité, utilisez plutôt l'instruction DELETE.

Troncature des tables volumineuses

MicrosoftSQL Server permet de supprimer ou de tronquer des tables dotées de plus de 128 extensions, sans maintenir de verrous simultanés sur toutes les extensions requises pour la suppression. Pour plus d'informations, consultez Suppression et reconstruction d'objets volumineux.

Exemples

L'exemple suivant supprime toutes les données de la table JobCandidate. Des instructions SELECT sont incluses avant et après l'instruction TRUNCATE TABLE pour comparer les résultats.

USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount 
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount 
FROM HumanResources.JobCandidate;
GO