批量刪除與更新_20110825
在工作中,經常需要批量更新、刪除資料,經過少量的變更,速度有很大的提升;
如有一個檔案number.unl 大概200W的資料量;原表有1000W左右
400785688
400790518
400792204
400816886
400820101
...
現在要用根據這個檔案去Delete表資料
以前的做法是生成Update.sql
delete from xxx where subscriberkey=400785688;
delete from xxx where subscriberkey=400785688;
....
速度太慢了,不能滿足業務的需求;
新的方案:
通過Rowid來刪除:
1 建立中間表,將檔案upload到資料庫;
建立表結構
Create table mouse_subscriberkey as select a.subscriberkey from cbe_subscriber a where 1=0;
通過sqlldr將資料匯入;好像可以通過UTL_FILE包來讀取檔案,沒做過,有時間學習下;
2 建立刪除的儲存過程;
create or replace procedure mouse_delete_cbe_subscriber
is
type ridArray is table of rowid index by binary_integer;
v_rowid ridArray;
begin
select a.rowid bulk collect into v_rowid
from cbe_subscriber a, mouse_subscriberkey b
where a.subscriberkey=b.subscriberkey
and rownum < 100001;
forall i in 1 .. v_rowid.COUNT
delete from cbe_subscriber where rowid=v_rowid(i);
dbms_output.put_line('delete rows: '||v_rowid.COUNT);
end;
/
declare
v_total integer := 0;
begin
select count(*) into v_total from cbe_subscriber a, mouse_subscriberkey b where a.subscriberkey =b.subscriberkey;
while v_total > 0
loop
execute immediate 'begin mouse_delete_cbe_subscriber; end;';
commit;
v_total := v_total - 100000;
end loop;
dbms_output.put_line('Bulk delete complete.');
end;
/
速度有很大的提升;
Update語句也可參考同樣的思路;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10248702/viewspace-705812/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hibernateHQl批量插入、刪除、更新
- 表格的批量重新命名與批量刪除
- MySQL 批量更新、刪除資料shell指令碼MySql指令碼
- php(js)批量刪除/單個刪除PHPJS
- SQL Cookbook—插入、更新與刪除SQL
- 批量刪除死鎖
- oracle批量刪除表Oracle
- hibernate批量刪除
- 批量刪除 redis keysRedis
- git 批量刪除本地分支Git
- 批量刪除容器和映象
- 批量刪除表CHI_%
- docker 批量刪除容器和映象Docker
- 批量刪除大量小檔案
- Linux批量刪除檔案Linux
- oracle 批量刪除觸發器Oracle觸發器
- MySQL批量刪除指定字首表MySql
- SD--批量刪除訂單
- DB2 批量刪除表DB2
- 實現 UITableViewCell的批量刪除UIView
- vue+element-ui操作刪除(單行和批量刪除)VueUI
- Mac電腦如何批量刪除照片?Mac
- linux 模糊批量刪除檔案Linux
- 批量刪除空的資料夾
- 批量刪除檔案中的^M
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- SQL Server 批量刪除重複記錄(批量、快速、安全)SQLServer
- MongoDB資料庫中更新與刪除資料MongoDB資料庫
- 6.12php對資料庫的刪除和批量刪除PHP資料庫
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄) 轉Oracle
- 【轉】oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- Linux下find與rm指令結合批量刪除檔案Linux
- 如何批量刪除指定的GitHub ReposGithub
- elasticsearch按照日期定時批量刪除索引Elasticsearch索引
- 批量刪除dbms_job建立的job
- Oracle批量建立、刪除資料庫表Oracle資料庫
- 【工具】批量刪除binlog 的指令碼指令碼
- 批量新增、刪除控制元件組--【ssnc】控制元件