请问drop和truncate的差别

程序员-阿勇 2013-10-10 03:49:28
请问各位大神,假如我在做删除表中数据时,哪种速度或者说效率高,网上很多的说法,说什么数据大的话drop的再新建表会快点,我的想法也是这样的,但是这样数据好像不太安全,没法回滚,假若在的数据库正在给一个公司使用,肯定会有数据的产生,当正式发布的时候肯定要删除数据,我想问问当数据量大的时候,而数据没用,我用drop表,再select表,这样是不是快点。不知道我的意思各位懂不懂,还说学生,不太会表达,希望各位大神,帮忙说下自己的意见
...全文
279 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2013-10-10
  • 打赏
  • 举报
回复
直接 truncate 吧,删除表是一个大工程,重新建就不一定是原来那个表了,因为: 与表相关的东西很多:索引,视图,触发器,权限等等, 楼主真是能够全部完整地再次建立吗? 这个风险完全没有必要去冒的。
ai_li7758521 2013-10-10
  • 打赏
  • 举报
回复
我的测试结果:亿级数据表drop是毫秒级操作。而truncate table是秒级操作。
KevinLiu 2013-10-10
  • 打赏
  • 举报
回复
reference this artcile:http://dba.stackexchange.com/questions/4163/why-use-both-truncate-and-drop
KevinLiu 2013-10-10
  • 打赏
  • 举报
回复
引用 12 楼 u012394290 的回复:
引用 11 楼 DBA_Huangzj 的回复:
drop是一起,但是truncate直接操作区而不是页,速度快,truncate的话千万级数据也许只要1、2秒,然后drop一个空表,总共可能也就5秒左右,而且ldf文件不会很大,但是如果千万级的表直接drop,日志文件估计要增加好几百M,而且预测要1分钟以上
总算懂了 ,谢谢啦!这论坛还不错,第一次来,感谢各位前辈的指导啦
TRUNCATE and DROP are almost identical in behavior and speed, so doing a TRUNCATE right before a DROP is simply unnecessary.
發糞塗牆 2013-10-10
  • 打赏
  • 举报
回复
既然第一次来,提醒一下.....结贴
程序员-阿勇 2013-10-10
  • 打赏
  • 举报
回复
引用 11 楼 DBA_Huangzj 的回复:
drop是一起,但是truncate直接操作区而不是页,速度快,truncate的话千万级数据也许只要1、2秒,然后drop一个空表,总共可能也就5秒左右,而且ldf文件不会很大,但是如果千万级的表直接drop,日志文件估计要增加好几百M,而且预测要1分钟以上
总算懂了 ,谢谢啦!这论坛还不错,第一次来,感谢各位前辈的指导啦
發糞塗牆 2013-10-10
  • 打赏
  • 举报
回复
drop是一起,但是truncate直接操作区而不是页,速度快,truncate的话千万级数据也许只要1、2秒,然后drop一个空表,总共可能也就5秒左右,而且ldf文件不会很大,但是如果千万级的表直接drop,日志文件估计要增加好几百M,而且预测要1分钟以上
程序员-阿勇 2013-10-10
  • 打赏
  • 举报
回复
引用 6 楼 DBA_Huangzj 的回复:
哦,看错了,以为delete,先truncate再drop最好
而且版主,我想问问,truncate表直接是把数据删了,留结构,你说的再drop最好 这是为什么呢? drop不是直接就把表中的数据,结构什么的都删了吗? 为什么要先有你说的前一部先truncate呢?听的我都晕啦
tcmakebest 2013-10-10
  • 打赏
  • 举报
回复
楼主是要删除全部数据吗?这还需要回滚?
發糞塗牆 2013-10-10
  • 打赏
  • 举报
回复
我不知道那些理论是如何来的,我实践过,先truncate再drop是最快的,特别是大数据量,超千万那种。大量数据的表直接drop引起的日志会很大
程序员-阿勇 2013-10-10
  • 打赏
  • 举报
回复
引用 6 楼 DBA_Huangzj 的回复:
哦,看错了,以为delete,先truncate再drop最好
唉,都没理解我的意思,我想问的是在大数据面前,我是truncate表,快还说drop表再建表快些,网上很多都说数据大的话drop会快点,但我不知道为什么,而且想知道详细一点。
發糞塗牆 2013-10-10
  • 打赏
  • 举报
回复
哦,看错了,以为delete,先truncate再drop最好
LongRui888 2013-10-10
  • 打赏
  • 举报
回复
如果你希望快速删除数据,那么可以使用truncate table表名,一般不需要drop table的,因为这样你还得再重建表,挺麻烦的。 如果你不仅要删除数据,而且你不需要这个表了,那么就drop table 表名。
發糞塗牆 2013-10-10
  • 打赏
  • 举报
回复
全表清空的话truncate快,但是truncate不能删除一部分数据
程序员-阿勇 2013-10-10
  • 打赏
  • 举报
回复
我想问问是哪个会快点,效率高点
ai_li7758521 2013-10-10
  • 打赏
  • 举报
回复
1.删除表确实是快。 2.数据确实没用了可以drop表,drop表后会连带删除表的索引,触发器等依赖对象。而truncate会保留表结构和依赖对象。 注意:Drop和truncate都是危险操作,需谨慎。
程序员-阿勇 2013-10-10
  • 打赏
  • 举报
回复
给公司在试用

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧