截断表和删除表都可以用删除数据,但有时候用truncate还是delete的呢?
截断表和清除数据的区别:
- delete和truncate都可以回收数据占用的空间,已经相关的索引等
- delete 删除是行级删除, truncate是表级别删除,所以截断表的速度会更快。
- 其次,delete是存入log日志,而truncate不会写入日志
- truncate会重置自动主键,而delete不会。
- truncate是DDL语句不可恢复,delete是DML语句,可恢复
- truncate不能有外键约束的表使用
- truncate后会使表和索引所占用的空间,恢复初始大小;delete不会重置表和索引所用的空间
使用truncate是高危操作,无法通过日志恢复即binlog的表级别恢复,建议能使用delete就使用delete,实在需要,建议进行备份后操作