delete和truncate的区别

浏览: 2119
测试省略
delete命令并不能完全释放掉表格或者索引的数据结构以及他们申请的页面。
在这一点上,SQL Server2005以后的版本比之前的版本做得好些,树比堆做
得更好些。
TRUNCATE语句和DELETE语句相比具有以下优点:
1,所用的事务日志空间较少
delete每删除一行数据,都会在事务日志中为删除的每行记录一个项。
truncate table通过释放用于存储数据的数据也来删除数据,并且在
事务日志中只记录页释放这个动作,而不是记录每一行。
2,使用的锁比较少
当执行delete语句的时候,将锁定表中各行以便删除。truncate table
始终锁定表和页面,而不是各行。
3,表中毫无例外的不保留任何页
执行delete语句之后,表仍然会包含空页。例如,必须至少使用一个排他表锁,
才能释放堆中的空页。如果执行删除操作时没有使用表锁,表(堆)中将包含
许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后太清除
进程迅速释放。
truncate table删除表中的所有行数据,但表的结构及其列,约束,索引等都
保持不变。如要删除表定义及其数据,直接使用drop table语句
为了及时的删除数据,释放空间,可以采用的方法有:
1,在表格上建立聚集索引
2,如果所有数据都不要了,要使用truncate table语句,而不是drop table语句
3,如果表格本身也不需要了,直接drop table
此外需要说明的是:
在delete数据之后,SQL Server却没有完全释放空间,虽然这些空间没被释放掉,
但是当表格插入新的数据时,这些空间会被从新使用。
如果真的看着这些空间碍事,而表格又不能整个被删除,处理起来就有点麻烦。如
果表格有聚集索引,重建以下索引能释放这些页面,还是很方便的。但是没有聚集
索引,可能就要重建一张表,把数据从旧表里复制过去,然后删除旧表,释放空间
或者在这张表上创建一个聚集索引。
推荐 0
本文由 TravyLee 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册