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

L'instruction TRUNCATE TABLE est une méthode rapide, non consignée dans le journal des transactions, qui permet de supprimer toutes les lignes d'une table. TRUNCATE TABLE est, du point de vue fonctionnel, identique à 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.

Troncature des tables volumineuses

Microsoft SQL Server 2005 permet désormais de supprimer ou de tronquer les tables qui possèdent plus de 128 extensions sans maintenir des verrous sur toutes les extensions impliquées dans 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

Voir aussi

Concepts

Suppression de lignes au moyen de l'instruction DELETE
Suppression de lignes dans des ensembles de résultats
Limitation du nombre de lignes à supprimer avec la clause TOP

Autres ressources

DROP TABLE (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005