The TRUNCATE TABLE statement is a powerful tool for quickly deleting all the records in a table. It is faster than the DELETE FROM statement, as it does not record each row that is deleted in the transaction logs. This reduces resource overhead and the number of locks acquired. However, it bypasses transaction logging and the only record of truncation in transaction logs is page demapping.
As such, records deleted by the TRUNCATE TABLE statement cannot be restored. In contrast, the DELETE FROM statement records each row that is deleted in the transaction logs, so the operation takes a while and causes the transaction logs to grow dramatically. It also uses a row lock during execution, which means that each row in the table is locked for deletion. Once DELETE is executed, a table can still contain empty pages of data.
At a high level, you might consider truncating a command similar to a Delete statement without a Where clause. The DROP TABLE operation removes the definition and data from the table, as well as indexes, constraints, and triggers related to the table. Using the truncate statement will take much less time to delete all the records in a table than to delete, since it does not require the same logging methods or the same system resources. In fact, this can be so significant that, if you are deleting more than two-thirds of a very large table, it may be more practical to write the records you want to keep in a new table, TRUNCATE the original table, and rewrite the records you saved to the original table. The advantage of using TRUNCATE TABLE is that, in addition to deleting all the rows in the table, it resets the IDENTITY to SEED, and the deallocated pages are returned to the system for use in other areas.
In PostgreSQL, you need the TRUNC privilege; in SQL Server, the minimum permission is ALTER table; in MySQL, you need the DROP privilege. We will explore the difference between the SQL Delete and SQL Truncate commands in more detail. While both commands can be used to delete data from a database table, there are some key differences between them. The TRUNCATE command removes all rows from a table more quickly than a DELETE statement. It does not require any logging methods or system resources and can be used to reset an IDENTITY column back to its seed value.
However, it cannot be used with tables involved in replication or log transfer since both rely on transaction logs for remote database consistency. In contrast, DELETE statements record each record deletion and cause table row locks. They can be used with WHERE clauses to delete specific rows from a table but take longer than TRUNCATE commands due to their logging requirements. In conclusion, both TRUNCATE TABLE and DELETE FROM statements have their advantages and disadvantages when it comes to deleting data from a database table. The TRUNCATE command is faster but cannot be undone while DELETE statements are slower but can be undone when used with TRANSACTION.