What is the difference between DELETE, TRUNCATE and DROP?
All three remove data, but at different levels and with very different costs.
- DELETE is DML. It removes rows one at a time, accepts a WHERE clause, fires triggers, is fully logged, and can be rolled back inside a transaction. Because each row is logged, deleting millions of rows is slow and produces a large binary log.
- TRUNCATE is DDL. It drops and recreates the table, so it is far faster, takes no WHERE clause, fires no row triggers, resets AUTO_INCREMENT to 1, and causes an implicit commit — you cannot roll it back.
- DROP is DDL that removes the table itself: rows, structure, indexes, and permissions all go.
Note: A frequent follow-up is why DELETE does not release disk space back to the operating system. InnoDB marks the pages reusable inside the tablespace but does not shrink the file. To actually reclaim it you need OPTIMIZE TABLE, which rebuilds the table.





