sql >> Database teknologi >  >> RDS >> Sqlserver

Fordele og ulemper ved TRUNCATE vs DELETE FROM

TRUNCATE genererer ingen rollback-data, hvilket gør det lynhurtigt. Det deallokerer bare de datasider, der bruges af tabellen.

Men hvis du er i en transaktion og vil have muligheden for at "fortryde" denne sletning, skal du bruge DELETE FROM , som giver mulighed for at rulle tilbage.

EDIT: Bemærk, at ovenstående er forkert for SQL Server (men det gælder for Oracle). I SQL Server er det muligt at rulle tilbage en trunkeringsoperation, hvis du er inde i en transaktion, og transaktionen ikke er blevet begået. Fra et SQL Server-perspektiv er en vigtig forskel mellem DELETE FROM og TRUNCATE dette :"DELETE-sætningen fjerner rækker én ad gangen og registrerer en post i transaktionsloggen for hver slettede række. TRUNCATE TABLE fjerner dataene ved at deallokere de datasider, der bruges til at lagre tabeldataene og registrerer kun sidedeallokeringerne i transaktionsloggen ."

Med andre ord er der mindre logning under en TRUNCATE, fordi kun sidedeallokeringerne registreres i transaktionsloggen, hvorimod med en DELETE FROM hver række slettes. Det er en af ​​grundene til, at TRUNCATE er lynhurtigt.

Bemærk også fra det MSDN-link, at du ikke kan afkorte tabeller, der refereres til af fremmednøglebegrænsninger, deltage i en indekseret visning eller udgives ved hjælp af transaktionsreplikering eller flettereplikering.

EDIT 2: Et andet vigtigt punkt er, at TRUNCATE TABLE vil nulstille din identitet til det oprindelige frø, mens DELETE FROM fortsætter med at stige, hvor det slap. Reference:Ben Robinsons svar.



  1. MySQL-partitionering:Ydeevneforøgelse For flere partitionerede tabeller. Hvorfor?

  2. MySQL Views:Henvisning til et beregnet felt (ved navn) i et andet beregnet felt

  3. strip_tags virker ikke

  4. SqlServer:Login mislykkedes for brugeren