仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 944|回复: 9
打印 上一主题 下一主题

[学习教程] Sql Server中truncate table与delete语句的区分

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使为了数据安全,我们搭建了主从。但实时主从备份只能防止硬件问题,比如主库的硬盘损坏。但对于误操作,则无能为力。比如在主库误删一张表,或者一个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:32 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
简单生活 该用户已被删除
板凳
发表于 2015-1-25 17:14:53 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
因胸联盟 该用户已被删除
地板
发表于 2015-2-3 12:02:30 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
山那边是海 该用户已被删除
5#
发表于 2015-2-8 22:45:13 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
不帅 该用户已被删除
6#
发表于 2015-2-26 13:38:11 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
冷月葬花魂 该用户已被删除
7#
 楼主| 发表于 2015-3-8 15:30:00 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
透明 该用户已被删除
8#
发表于 2015-3-16 03:58:41 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-22 20:10:24 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
若相依 该用户已被删除
10#
发表于 2015-3-22 20:10:21 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-29 07:12

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表