orcl 如何快速刪除表中百萬或千萬數據


orcl 數據庫表中數據達到上千萬時,已經變的特別慢了,所以時不時需要清掉一部分數據。

bqh8表中目前有10000000條數據,需要保留19條數據,其余全部清除掉。

以下為個人方法:

1、首先把需要保留的數據備份到temp1臨時表中。

create table temp1 as select * from bqh8 where id<20;
select * from temp1;

2、然后再用truncate刪除整個表的數據。

truncate table bqh8;
select * from bqh8;

3、最后再把temp1表中的數據復制到bqh8表中。

insert into bqh8 select * from temp1;

commit;
select * from bqh8;

--------------------------------------------------------------------------------------------------

有人說刪除數據盡量不要用truncate,但是truncate命令速度快,占用資源少,方面快捷,如果你確定表中數據完全可以刪除的話可以用此命令。如果表中部分數據有用,那你最后備份好,否則一旦使用此命令,就呵呵了, 當然你也可以用delete。但刪除少量數據效率還行,若是幾百萬甚至幾千萬效率特別低,各有利有弊。根據實際情況而選。當然delete命令還是有好處的,如果不能保證此后的數據有不有用,但是當前不知道,或者干脆就是誤刪了,那么使用rollback命令直接回滾,當然rollback命令可以添加回滾點,定位回滾,恢復數據比較方便,所以說對與初學者,小柏強烈建議大家刪除數據時使用delete命令,雖然效率低一點,但是加保險了,親身經歷,誤用truncate命令清空了一個表,還好這個表是無關緊要的,否則我就只能呵呵受懲罰了。當然,強烈的建議是,做任何操作前,對於有用的數據都要事先備份,有備無患。

 

下面介紹一下truncate與delete的區別:

1、在功能上,truncate是清空一個表的內容,它相當於delete from table_name。

2、delete是dml操作,truncate是ddl操作;因此,用delete刪除整個表的數據時,會產生大量的roolback,占用很多的rollback segments, 而truncate不會。

3、在內存中,用delete刪除數據,表空間中其被刪除數據的表占用的空間還在,便於以后的使用,另外它是“假相”的刪除,相當於windows中用delete刪除數據是把數據放到回收站中,還可以恢復,當然如果這個時候重新啟動系統(OS或者RDBMS),它也就不能恢復了!

而用truncate清除數據,內存中表空間中其被刪除數據的表占用的空間會被立即釋放,相當於windows中用shift+delete刪除數據,不能夠恢復!

4、truncate 調整high water mark 而delete不;truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默認)delete 則不可以。

5、truncate 只能對TABLE,delete 可以是table,view,synonym。

6、TRUNCATE TABLE 的對象必須是本模式下的,或者有drop any table的權限 而 DELETE 則是對象必須是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的權限。

7、在外層中,truncate或者delete后,其占用的空間都將釋放。

8、truncate和delete只刪除數據,而drop則刪除整個表(結構和數據)。

-----------------------------------------------------------------------------------------------

TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日志資源少。
 
DELETE 語句每次刪除一行,並在事務日志中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日志中記錄頁的釋放。
 
TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。
 
如果想保留標識計數值,請改用 DELETE。
 
如果要刪除表定義及其數據,請使用 DROP TABLE 語句。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM