TRUNCATE
ne génère aucune donnée de restauration, ce qui le rend ultra-rapide. Il libère simplement les pages de données utilisées par la table.
Cependant, si vous êtes dans une transaction et que vous souhaitez pouvoir "annuler" cette suppression, vous devez utiliser DELETE FROM
, ce qui donne la possibilité de revenir en arrière.
MODIF : Notez que ce qui précède est incorrect pour SQL Server (mais cela s'applique à Oracle). Dans SQL Server, il est possible d'annuler une opération de troncation si vous êtes à l'intérieur d'une transaction et que la transaction n'a pas été validée. Du point de vue de SQL Server, une différence clé entre DELETE FROM et TRUNCATE est ceci :"L'instruction DELETE supprime les lignes une par une et enregistre une entrée dans le journal des transactions pour chaque ligne supprimée. 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 d'autres termes, il y a moins de journalisation lors d'un TRUNCATE car seules les désallocations de pages sont enregistrées dans le journal des transactions, alors qu'avec un DELETE FROM chaque suppression de ligne est enregistrée. C'est l'une des raisons pour lesquelles TRUNCATE est rapide comme l'éclair.
Notez également à partir de ce lien MSDN que vous ne pouvez pas tronquer les tables référencées par des contraintes de clé étrangère, participer à une vue indexée ou publiées à l'aide de la réplication transactionnelle ou de la réplication de fusion.
MODIFICATION 2 : Un autre point clé est que TRUNCATE TABLE réinitialisera votre identité à la graine initiale, tandis que DELETE FROM continuera à incrémenter à partir de là où elle s'était arrêtée. Référence :réponse de Ben Robinson.