您的位置:首页 > 其它

有一个拥有1亿条数据的表,只需要保留其中的5条,其他删除,如何做?

2012-06-19 11:09 344 查看
这就需要用truncate table来搞定了,如下:
select 5条数据 into #临时表 from 1亿条数据的牛X表

truncate table 1亿条数据的牛X表 --让它牛X,不到10毫秒干掉它。

insert 1亿条数据的牛X表 select * from #临时表

drop table #临时表

truncate和 delete只删除数据不删除表的结构(定义)
; drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.

1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。

2、truncate不能进行回滚操作。

3、truncate不触发任何delete触发器。

5、当表被truncate后,这个表和索引所占用的空间会恢复到初始大小,而delete操作不会减少表或索引所占用的空间。

6、不能truncate一个带有外键的表,如果要删除首先要取消外键,然后再删除。

DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的的删除操作作为事务记录在日志中保存以便进行进行回滚操作。

TRUNCATE TABLE 则一次性地从表中删除所有的数据页并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

DELETE语句可以通过WHERE对要删除的记录进行选择。而使用TRUNCATE TABLE将删除表中的所有记录。因此,DELETE语句更灵活。如果DELETE不加WHERE子句,
DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。如果一个表中有自增字段,使用TRUNCATE TABLE和没有WHERE子句的DELETE删除所有记录后,这个自增字段将起始值恢复成1.如果你不想这样做的话,可以在DELETE语句中加上永真的WHERE,如WHERE
1或WHERE true。DELETE FROM table1 WHERE 1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐