sql >> Databasteknik >  >> RDS >> Sqlserver

För- och nackdelar med TRUNCATE vs DELETE FROM

TRUNCATE genererar ingen återställningsdata, vilket gör den blixtsnabb. Det avallokerar bara datasidorna som används av tabellen.

Men om du är i en transaktion och vill ha möjligheten att "ångra" denna borttagning, måste du använda DELETE FROM , vilket ger möjligheten att återställa.

EDIT: Observera att ovanstående är felaktigt för SQL Server (men det gäller för Oracle). I SQL Server är det möjligt att återställa en trunkeringsoperation om du är inne i en transaktion och transaktionen inte har genomförts. Ur ett SQL Server-perspektiv är en viktig skillnad mellan DELETE FROM och TRUNCATE denna :"DELETE-satsen tar bort rader en i taget och registrerar en post i transaktionsloggen för varje raderad rad. TRUNCATE TABLE tar bort data genom att avallokera datasidorna som används för att lagra tabelldata och registrerar endast sidavallokeringarna i transaktionsloggen ."

Med andra ord, det sker mindre loggning under en TRUNCATE eftersom endast sidavallokeringarna registreras i transaktionsloggen, medan radering av varje rad registreras med en DELETE FROM. Det är en av anledningarna till att TRUNCATE går blixtsnabbt.

Notera också från den MSDN-länken att du inte kan trunkera tabeller som refereras av främmande nyckelbegränsningar, delta i en indexerad vy eller publiceras genom att använda transaktionsreplikering eller sammanslagningsreplikering.

EDIT 2: En annan viktig punkt är att TRUNCATE TABLE kommer att återställa din identitet till det ursprungliga fröet, medan DELETE FROM fortsätter att öka från där det slutade. Referens:Ben Robinsons svar.



  1. Easysoft ODBC-drivrutiner och ODBCINST-biblioteket

  2. Hur IsFinite() fungerar i PostgreSQL

  3. 5 bra skäl att ladda ner och använda Microsoft Access-mallar

  4. Hur man skapar länkad server MySQL