oracle快速批量刪除資料
阿新 • • 發佈:2019-02-06
需求:
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不能。