参考:https://www.cnblogs.com/lanymy/articles/2335291.html
truncate table 清空表数据 但不会删除索引 只是删除索引对应的row数据
delete from table where 删除指定数据 逐行删除,比清空表慢 会把索引对应的数据删掉,索引保留
另:
truncate 删除数据 自增列 自增序号重置
delete 删除数据 自增列 自增序号不重置
如:
字段id为自增列 共10条数据,即id最大值为10
使用truncate清空表后再插入,id=1
使用delete删除表后再插入,id=11
truncate 清空表数据 并回收数据页磁盘空间
delete 清空表数据 不回收磁盘空间
如:表占用4G磁盘空间,分别清空表后
重新插入数据时,truncate从磁盘空间开始插入,插入多少就有多少数据,delete后原来4g的空间不变,插入时是在这4g空间随机插入 ,即可能插入100K数据,但是占用空间还是4G,有很多碎片在里面 查询时,truncate后新插入数据的表 查询的是100K数据,delete后的表查询的是4G的数据,原则上会效率更慢
另外:truncate为ddl操作,delete为dml操作,所有dml操作原则上都支持回滚,因此delete会记录大量操作日志,用于删除错误后的数据回滚,truncate直接清空数据,无法回滚 因此truncate比delete清空表快得多