(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 TRUNCATE
et DELETE
:
- Utilisation de l'espace de
TRUNCATE
journalisation : enregistre uniquement les pages / extensions * libérées, tandis que DELETE
les lignes individuelles sont enregistrées.
- Utilisation des
TRUNCATE
verrous : utilise généralement moins de verrous, car il faut un verrou de table et des verrous de page, par opposition à celui DELETE
qui utilise des verrous de ligne **.
IDENTITY
séquences: TRUNCATE
réinitialise la séquence d'identité sur une table, si elle est présente.
(* Une extension = 8 pages. TRUNCATE
Enregistrera / 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 TABLE
des 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 TABLE
c'est nettement mieux que DELETE FROM TABLE
si vous videz la table mais que vous souhaitez conserver la structure (NB: TRUNCATE
ne 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>' after
TRUNCATE /
DELETE` pour que l'optimiseur de requêtes ne soit pas gâché par les anciennes statistiques.
TRUNCATE TABLE
place deDELETE FROM
.