需求:
1、有一張客戶表名為Pers,其主鍵為客戶編碼persnbr;
2、pers表中的7個列有外鍵約束;
2、pers表中有10萬條資料是批量產生的(persnbr>=100000000的資料),現在需要把這10萬條資料刪除以便於重建。
解決方案:
1、直接執行delete from pers where persnbr>=100000000,結果速度超慢。
2、利用TRUNCATE文法:
create table pers_TEMP as select * from pers where persnbr<100000000;--把小於100000000的記錄備份一下,查詢語句會比較快
truncate table pers;--將pers中的資料全部清除,速度很快
insert into pers select * from pers_TEMP ; --將備份的資料重新插入到pers表中
truncate和delete對比
1、truncate比delete速度快很多,且使用的系統和交易記錄資源少。這是因為truncate通過釋放儲存表資料所用的資料頁來刪除資料,並且只在交易記錄中記錄頁的釋放;而delete語句每次刪除一行,並在交易記錄中為所刪除的每一行記錄一項。
2、truncate是ddl語句,delete是dml語句。和其它ddl語句一樣,truncate將會被隱式提交,所以不能對truncate使用rollback命令;而delete語句每條記錄的刪除都會被記錄在交易記錄中,所以可以被rollback。
3、truncate語句將會把表的索引值重新設定成初始大小,而delete不能。
使用Linux檔案控制代碼恢複誤刪除的Oracle資料檔案
Oracle重複資料刪除記錄的幾種方式
Oracle比較快的重複資料刪除資料的方式
Oracle資料庫刪除資料Delete語句和Truncate語句的對比
Oracle用delete命令刪除資料恢複