Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Плюсове и минуси на TRUNCATE срещу DELETE FROM

TRUNCATE не генерира данни за връщане назад, което го прави светкавично бърз. Той просто освобождава страниците с данни, използвани от таблицата.

Ако обаче сте в транзакция и искате възможността да „отмените“ това изтриване, трябва да използвате DELETE FROM , което дава възможност за връщане назад.

РЕДАКТИРАНЕ: Имайте предвид, че горното е неправилно за SQL Server (но се отнася за Oracle). В SQL Server е възможно да отмените операция за съкращаване, ако сте в транзакция и транзакцията не е била ангажирана. От гледна точка на SQL Server една ключова разлика между DELETE FROM и TRUNCATE е това :"Инструкцията DELETE премахва редове един по един и записва запис в регистрационния файл на транзакциите за всеки изтрит ред. TRUNCATE TABLE премахва данните, като освобождава страниците с данни, използвани за съхраняване на данните от таблицата, и записва само освобождаванията на страници в регистрационния файл на транзакциите ."

С други думи, има по-малко регистриране по време на TRUNCATE, тъй като само освобождаването на страницата се записва в регистрационния файл на транзакциите, докато при DELETE FROM се записва изтриването на всеки ред. Това е една от причините TRUNCATE да е светкавично бърз.

Обърнете внимание също така от тази MSDN връзка, че не можете да съкращавате таблици, които са посочени от ограничения на външен ключ, участват в индексиран изглед или са публикувани чрез използване на репликация на транзакции или репликация на сливане.

РЕДАКТИРАНЕ 2: Друг ключов момент е, че TRUNCATE TABLE ще нулира самоличността ви до първоначалното начало, докато DELETE FROM ще продължи да се увеличава от мястото, където е спряло. Справка:Отговорът на Бен Робинсън.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да хванем изхода на DBCC-изявление в изкушен

  2. Намаляване на разходите за лицензиране на SQL Server

  3. Заявка за дата на SQL Server

  4. Филтрирайте по изходна клауза sql

  5. Защо select SCOPE_IDENTITY() връща десетичен знак вместо цяло число?