仓酷云

标题: Sql Server中truncate table与delete语句的区分 [打印本页]

作者: 冷月葬花魂    时间: 2015-1-16 14:09
标题: Sql Server中truncate table与delete语句的区分
使为了数据安全,我们搭建了主从。但实时主从备份只能防止硬件问题,比如主库的硬盘损坏。但对于误操作,则无能为力。比如在主库误删一张表,或者一个update语句没有指定where条件,导致全表被更新。我们都晓得truncatetable能够用来删除全部表的内容,它与delete前面不跟where前提的效果是一样。但除此以外,我们还分明它们之间有别的的区分吗?本章我们将一同会商truncate与delete区分。

我们先看一下truncatetable的申明:
删除表中的一切行,而不纪录单个行删除操纵。TRUNCATETABLE在功效上与没有WHERE子句的DELETE语句不异;可是,TRUNCATETABLE速率更快,利用的体系资本和事件日记资本更少。

truncatetable的语法:
truncatetable要删除数据的表名


区分:
1,truncate删除数据后,表中标识列重置为界说的种子值,也就是标识列从头入手下手计数,而使
用delete删除数据,则会保存标识计数器,新的自增量会从删除前的最年夜值入手下手计数。

2,利用truncate删除数据将不触发触发器,而delete会触发delete触发器。

3,truncate所占用的事件日记空间会很少,由于truncate不管帐录删除历程,而delete每删除一行数据,城市在事件日记中纪录一条数据,已便往后可以恢单数据。也就是说,利用truncate删除的数据不成恢复,但速率比delete要快良多。而经由过程delete删除的数据能够经由过程备份文件来恢复。

4,truncate是一个ddl言语,它会被隐式提交,以是不克不及经由过程rollback命令来取消truncate命令。

以上四点为对照主要的部分,晓得了下面四点后,也就也许可以分明的懂得甚么时分用truncate,甚么时分用delete了。

以下为对照笼统的区分:
5,truncate利用的锁对照少,由于利用truncatetable时是锁定表和页,而利用delete则是锁定表中的一切行以便删除。

6,利用delete删除一切数据,在表中仍会留下一个空页,也就是删除前的数据所占用的空间还被占用着,不会开释失落(以后能够经由过程别的命令来开释),而利用truncatetable则不会留下任何页。

7,truncate会从头设置表的索引,以是利用truncate操纵后的表的索引速率会比delete操纵后的表要快一些。

注重:固然truncatetable在删除数据的速率上会占据必定的上风,但并非在一切的情形我们都可使用truncate,存在以下情形就利用truncate就会失利。
1,要删除数据的表包括foreignkey束缚,而delete则能够经由过程级联删除来删除相干联的数据。
2,被索引视图援用过的表,也不克不及利用truncate.

以上为自己收拾的truncatetable与delete之间的区分,有不合错误或遗漏的部分请人人指出来,一同会商。支持多线程,充分利用CPU资源
作者: 分手快乐    时间: 2015-1-18 12:11
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
作者: 简单生活    时间: 2015-1-25 17:14
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
作者: 因胸联盟    时间: 2015-2-3 12:02
所以你总能得到相应的升级版本,来满足你的需求。
作者: 山那边是海    时间: 2015-2-8 22:45
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
作者: 不帅    时间: 2015-2-26 13:38
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
作者: 冷月葬花魂    时间: 2015-3-8 15:30
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
作者: 透明    时间: 2015-3-16 03:58
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
作者: 若相依    时间: 2015-3-22 20:10
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
作者: 精灵巫婆    时间: 2015-3-22 20:10
一个是把SQL语句写到客户端,可以使用DataSet进行加工;




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2