(C'était à l'origine un commentaire à la réponse de @ DaveE, mais je l'ai mis dans sa propre réponse car elle est longue)
TRUNCATE est une opération enregistrée. Il doit en être autrement, il n'est pas conforme à ACID. Cependant, les différences entre TRUNCATEet DELETE:
- Utilisation de l'espace de
TRUNCATEjournalisation : enregistre uniquement les pages / extensions * libérées, tandis que DELETEles lignes individuelles sont enregistrées.
- Utilisation des
TRUNCATEverrous : utilise généralement moins de verrous, car il faut un verrou de table et des verrous de page, par opposition à celui DELETEqui utilise des verrous de ligne **.
IDENTITYséquences: TRUNCATEréinitialise la séquence d'identité sur une table, si elle est présente.
(* Une extension = 8 pages. TRUNCATEEnregistrera / supprimera les extensions si elles sont toutes de cette même table, sinon elle enregistrera / supprimera les pages des extensions mixtes.
** Un effet secondaire de cela est que DELETE FROM TABLEdes pages vides peuvent potentiellement être allouées à la table, selon que l'opération peut obtenir un verrou de table exclusif ou non.)
Donc (retour à la question d'origine), TRUNCATE TABLEc'est nettement mieux que DELETE FROM TABLEsi vous videz la table mais que vous souhaitez conserver la structure (NB: TRUNCATEne peut pas être utilisé sur une table référencée par une clé étrangère d'une autre table).
Comme indiqué dans le commentaire de @ Tullo, vérifiez également le modèle de récupération de votre base de données - s'il est plein, vous devez soit commencer à prendre des sauvegardes de journaux, soit changer votre modèle de récupération en simple. Une fois que vous avez effectué l'une de ces opérations, vous souhaiterez probablement réduire votre fichier journal en tant qu'opération unique (NB: fichier journal uniquement ) afin de récupérer tout cet espace libre.
Enfin, une autre chose à savoir - les statistiques de table. exécutez UPDATE STATISTICS <TABLENAME>' afterTRUNCATE /DELETE` pour que l'optimiseur de requêtes ne soit pas gâché par les anciennes statistiques.
TRUNCATE TABLEplace deDELETE FROM.