Skip to main content
TRUNCATE Vs DELETE
     

Q1. What are the difference between TRUNCATE command and DELETE command?

Q2. Can TRUNCATE be rolled back like the DELETE command?

Q3. What are the advantages of TRUNCATE  command compare to DELETE?  


Q1.What are the difference between TRUNCATE command and DELETE command?


TRUNCATE :

1.Remove all pages from the table. You can’t use WHERE clause with TRUNCATE .

2.Deallocate the data pages in the table.

3.Faster than DELETE.

4.Reset the identity column. TRUNCATE  is a DDL statement. So you need ALTER permissions for it.

5.Doesn’t fire trigger.

6.Acquire only page or table lock..

7. TRUNCATE  cannot be used with indexed views.

8. Drop all object’s statistics and leave the table empty. Zero pages are left in the table.



DELETE:

1.Remove all pages from file if used without a WHERE clause. You can use WHERE clause with DELETE.

2.Remove 1 row at a time and store every deleted row in transaction log.

3.Slower than TRUNCATE .

4.For DELETE you need DELETE permission on the table.

5.Fires DELETE triggers.

6.Acquire row/page or table lock.

7. DELETE can be used with indexed views.

8.Keep statistics and allocated space. After executing DELETE statement, still table may contain empty pages.



Q2. Can TRUNCATE be rolled back like the DELETE command?

Myth: TRUNCATE  cannot be rolled back.

Reality: DDL are auto commit. But TRUNCATE  can be rolled back if used inside a transaction block.

Following example demonstrate it:
 

--Create and populate the test table:
Create table dbo.TestTruncate
(
id INT
)

INSERT INTO dbo.TestTruncate(id)
SELECT 1 UNION
SELECT 2 UNION
SELECT 3

BEGIN TRANSACTION--Begin the transaction

      SELECT * FROM dbo.TestTruncate --Check the data availability
     
      TRUNCATE TABLE dbo.TestTruncate --Truncating the table
     
      SELECT
            resource_type,
            request_mode,resource_description,                            
            resource_associated_entity_id
      FROM   sys.dm_tran_locks
--The Database Engine uses schema modification(Sch-M) locks during a table   DDL operation. In request_mode column you can see schema modification (Sch-M) lock request for truncate statement.
               
      SELECT * FROM dbo.TestTruncate --Table will be empty now.
     
ROLLBACK   --Rollback the transaction

SELECT * FROM dbo.TestTruncate--Table will be having all the data.

DROP TABLE dbo.TestTruncate


Q3.What are the advantages of TRUNCATE  command compare to DELETE?

TRUNCATE command has the following advantages compare to DELETE:
-Less number of Locks

DELETE statement locks each row in the table for deletion. TRUNCATE locks the table and page but not each row.
-Less transaction log space.

DELETE statement removes one row at a time and records an entry in the transaction log for each deleted row. TRUNCATE TABLE removes the data by deallocating the data pages and records the page deallocations in the transaction log.


Comments

Popular posts from this blog

SQL Server script Error: Insufficient result space to convert uniqueidentifier value to char.

Error:    G etting below error while trying to copy data from one table to another: Msg 8170, Level 16, State 2, Line 1004  Insufficient result space to convert uniqueidentifier value to char.   Fix: UserID column which would be having Unique identifier data require more space (36 character). Size is specified as 15 here. To fix it just specify 36 as varchar length or specify Uniqueidentifier as data type for UserID  column.

While executing Select query to pull data from a different server, SQL Server is showing following error:

Msg 7202, Level 11, State 2, Line 1 Could not find server 'LAPTOP-09O6NE3K\SQLEXPRESS03' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers. Completion time: 2024-02-05T17:18:24.6869756+05:30 Solution: Step1:  Check if the server is available in the sys.servers table SELECT name from sys.servers Step2:  If no, add the new server to the sys.servers table EXEC sp_addlinkedserver @server = 'server name' Eg" EXEC sp_addlinkedserver @server = 'LAPTOP-09O6NE3K\SQLEXP RESS03' Step3:  Recheck if the new server name is added to the sys.servers table. If yes, try then rerunning the select query which throwed the error. Now it should pull data from the table in the new server successfully.    

Overcoming Performance Issues with Memory Optimized tables - SQL Server 2014 CPT2

Overcoming Performance Issues with Memory Optimized tables - SQL Server 2014 CPT2 1.        Problem Tuning    databases so that they provide the best possible performance is one of the most important responsibilities of database administrators (DBAs).   SQL Server was originally designed at a time when it could be assumed that main memory was very expensive, so data needed to reside on disk except when it was actually needed for processing.   As the amount data    within an organization increases, accumulation of data affects the productivity of DBAs, who must spend considerable time and effort on achieving the high levels of database performance. 2.        Solution Nowadays memory is much cheaper and a working data set can be stored entirely in memory. The assumption that main memory was very expensive is no longer valid as memory prices have dropped enormously. Memory-opti...