SQL Server : différence entre `DELETE`, `TRUNCATE` et `DROP` ?

poze 2 months ago496 gadefr

1

Je veux vider une table de logs de 20 millions de lignes. DELETE FROM logs prend une éternité et remplit le journal de transactions. Que faire ?

Dyagnostik IA

Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.

poze 2 months ago

1 Repons

5
✓
✓ Repons yo aksepte

- DELETE : supprime ligne par ligne. Chaque ligne est journalisée, les triggers se déclenchent, et on peut filtrer avec WHERE. C'est lent sur de gros volumes. - TRUNCATE TABLE : désalloue les pages de données. C'est quasi instantané et très peu journalisé. Pas de WHERE, pas de triggers, et l'IDENTITY est réinitialisé. Impossible si une clé étrangère référence la table. - DROP TABLE : supprime la table elle-même, structure comprise.

Pour vider complètement la table : TRUNCATE TABLE logs;.

Pour supprimer une partie (ex. logs de plus de 90 jours) sans bloquer ni saturer le journal, procède par lots :

WHILE 1 = 1
BEGIN
  DELETE TOP (10000) FROM logs WHERE created_at < DATEADD(day, -90, SYSUTCDATETIME());
  IF @@ROWCOUNT = 0 BREAK;
END

À long terme, le partitionnement par date permet de supprimer une période entière instantanément (TRUNCATE ... WITH (PARTITIONS (...))).

Konekte pou di lòt moun si li te mache.

answered 2 months ago

Sign in and verify your email to post an answer.