sql >> Databáze >  >> RDS >> Sqlserver

Klady a zápory TRUNCATE vs DELETE FROM

TRUNCATE negeneruje žádná data o vrácení zpět, díky čemuž je bleskově rychlý. Pouze uvolní datové stránky používané tabulkou.

Pokud jste však v transakci a chcete mít možnost toto smazání "vrátit zpět", musíte použít DELETE FROM , což dává možnost vrátit se zpět.

UPRAVIT: Všimněte si, že výše uvedené je nesprávné pro SQL Server (ale platí pro Oracle). V SQL Server je možné vrátit zpět operaci zkrácení, pokud jste uvnitř transakce a transakce nebyla potvrzena. Z pohledu SQL Serveru je jeden klíčový rozdíl mezi DELETE FROM a TRUNCATE toto :"Příkaz DELETE odstraňuje řádky jeden po druhém a zaznamenává záznam do transakčního protokolu pro každý smazaný řádek. TRUNCATE TABLE odstraňuje data uvolněním datových stránek používaných k ukládání dat tabulky a zaznamenává pouze dealokace stránek do transakčního protokolu. ."

Jinými slovy, během TRUNCATE dochází k menšímu protokolování, protože do protokolu transakcí jsou zaznamenány pouze dealokace stránek, zatímco při DELETE FROM se zaznamenává odstranění každého řádku. To je jeden z důvodů, proč je TRUNCATE bleskově rychlý.

Všimněte si také z tohoto odkazu MSDN, že nemůžete zkrátit tabulky, na které odkazují omezení cizího klíče, které se účastní indexovaného zobrazení nebo jsou publikovány pomocí transakční replikace nebo slučovací replikace.

ÚPRAVA 2: Dalším klíčovým bodem je, že TRUNCATE TABLE obnoví vaši identitu na původní počáteční hodnotu, zatímco DELETE FROM bude pokračovat ve zvyšování od místa, kde skončilo. Odkaz:Odpověď Bena Robinsona.



  1. SQL Server 2008 udělte oprávnění information_schema.columns

  2. secure-file-priv Prázdná sada

  3. Jaký je nejlepší způsob ukládání hodnot zaškrtávacích políček v databázi MySQL?

  4. MySQL nebo PHP Transformujte řádky na sloupce