当前位置:  开发笔记 > 编程语言 > 正文

当'truncate table'需要0次时,为什么'从表中删除'需要很长时间?

如何解决《当'truncatetable'需要0次时,为什么'从表中删除'需要很长时间?》经验,为你挑选了4个好方法。

(我在MySql中试过这个)

我相信它们在语义上是等价的.为什么不识别这个微不足道的案例并加快速度呢?



1> Otávio Décio..:

truncate table无法回滚,就像删除并重新创建表一样.


在MySQL TRUNCATE表中没有DROP表,它删除所有记录并将SET auto_increment值设置为1

2> Dillie-O..:

......只是添加一些细节.

调用DELETE语句会告诉数据库引擎生成已删除的所有记录的事务日志.如果删除错误,您可以恢复记录.

调用TRUNCATE语句是一个"全有或全无"的毯子,它删除所有没有要从中恢复的事务日志的记录.它肯定更快,但只有当您确定不需要任何要删除的记录时才应该这样做.



3> Pervez Choud..:

从表中删除一次删除一行中的每一行,并将记录添加到事务日志中,以便可以回滚操作.删除所花费的时间也与表上的索引数成比例,并且是否存在任何外键约束(对于innodb).

截断有效地删除表并重新创建它,并且无法在事务中执行.因此,它需要更少的操作并快速执行.截断也不使用任何删除触发器.

有关MySql更快的详细信息,请参阅MySql文档:http: //dev.mysql.com/doc/refman/5.0/en/truncate-table.html



4> Eric Sabine..:

你的问题是关于MySQL的,我对MySQL作为产品几乎一无所知,但我想我会在SQL Server中添加一个TRUNCATE语句可以回滚.亲自试试吧

create table test1 (col1 int)
go
insert test1 values(3)
begin tran
truncate table test1
select * from test1
rollback tran
select * from test1

在SQL Server中记录了TRUNCATE,它只是没有以记录DELETE的冗长方式登录.我相信它被称为最小化记录操作.实际上,数据页仍然包含数据,但它们的范围已被标记为删除.只要数据页仍然存在,您就可以回滚截断.希望这是有帮助的.如果有人在MySQL上尝试,我有兴趣知道结果.


正确,有一篇很好的文章在http://weblogs.sqlteam.com/mladenp/archive/2007/10/03/SQL-Server-Why-is-TRUNCATE-TABLE-a-DDL-and-not.aspx这解释了差异 - 在SQL Server中.
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有