摘要:
参考:drop,delete与truncate的区别(删除表的方式,哪个快)_soulmate_P的博客-CSDN博客
delete和truncate都可以删除表中的数据,但是呢??效率差很多
正文:
业务场景:为了同步生产物品的数据到本地开发环境数据库,所以需要在开发环境操作:
备份--删除--导入,操作数据库informix:
sql:
备份:unload to ./bankbf.txt delimiter "|" select * from t_dict_bank; (导出默认是“|”分割的)
删除表:原来习惯行使用delete from t_dict_bank; 但是后面别人提醒truncate效率更高
于是就是用truncate table t_dict_bank;
导入生产数据:load from ./bank.txt delimiter "|" insert into t_dict_bank;
truncate:
1)truncate在使用时,不能加where条件。
2)truncate执行操作时,速度更快 且 不可回滚;是因为:TRUNCATE操作不会记录到事务日志中,而DELETE操作会记录到事务日志中,记录日志会耗时,所以TRUNCATE要快于DELETE 且 truncate不可回滚。
3)truncate删除表数据是:先删除整张表包括数据,再重新创建表,因此,若果表中有自增长,会把自增长id 重置成1开始。 delete删除表数据时, 每次从表中删除一行。
4)表和索引所占空间。 当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,而DELETE操作不会减少表或索引所占用的空间。drop语句将表所占用的空间全释放掉。
5)应用范围。TRUNCATE 只能对TABLE;DELETE可以是table和view
6) truncate、drop是DLL(data define language),操作立即生效,不会记录到事务日志中去
7)在没有备份情况下,谨慎使用 drop 与 truncate。要删除部分数据行采用delete且注意结合where来约束影响范围
————————————————
原文链接:https://blog.csdn.net/qq_38737586/article/details/100134039
!!!!!!!!!!!!注意点:
1、 DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。--------DML会涉及到事务、日志