我的编程空间,编程开发者的网络收藏夹
学习永远不晚

bulk批量删除数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

bulk批量删除数据

bulk批量删除数据

1.  案列介绍

需要在一个1亿行的大表中,删除1千万行数据

需求是在对数据库其他应用影响最小的情况下,以最快的速度完成

如果业务无法停止的话,可以参考下列思路:

根据ROWID分片、再利用Rowid排序、批量处理、回表删除

在业务无法停止的时候,选择这种方式,的确是最好的

一般可以控制在每一万行以内提交一次,不会对回滚段造成太大压力

我在做大DML时,通常选择一两千行一提交

选择业务低峰时做,对应用也不至于有太大影响

2.  代码实现

测试环境

drop table t_emp purge;

create table t_emp as select * from emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

insert into t_emp select * from t_emp;

commit;

具体代码

version 1.0

declare

 cursor c_rowid is

   select rowid from t_emp where deptno = 30 order by rowid; --data need to be deleted

 type type_rowid is table of rowid index by pls_integer;

 v_tab_rowid type_rowid;

 v_num       number := 0;

begin

 open c_rowid;

 loop

   fetch c_rowid bulk collect

     into v_tab_rowid limit 50;

   --exit when c_rowid%notfound;

   forall i in v_tab_rowid.first .. v_tab_rowid.last

     delete from t_emp where rowid = v_tab_rowid(i);

   commit;

   v_num := v_num + v_tab_rowid.count;

    exit when c_rowid%notfound;

  endloop;

 close c_rowid;

 dbms_output.put_line(to_char(sysdate, 'yyyy-mm-dd:') || 'delete rows '||

                       to_char(v_num));

end;

/

version 2.0

declare

 cursor c_rowid is

   select rowid from t_emp where deptno = 30 order by rowid; --data need tobe deleted

 type type_rowid is table of rowid index by pls_integer;

 v_tab_rowid type_rowid;

 v_num       number := 0;

begin

 open c_rowid;

 loop

   fetch c_rowid bulk collect

     into v_tab_rowid limit 50;

    exit when v_tab_rowid.count=0;

   forall i in v_tab_rowid.first .. v_tab_rowid.last

     delete from t_emp where rowid = v_tab_rowid(i);

   commit;

   v_num := v_num + v_tab_rowid.count;

  endloop;

 close c_rowid;

 dbms_output.put_line(to_char(sysdate, 'yyyy-mm-dd:') || 'delete rows '||

                       to_char(v_num));

end;

/


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

bulk批量删除数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL 删除数据 批量删除(大量)数据

在删除数据的时候根据不同的场景使用不同的方法,比如说删除表中部分数据、删除表的结构、删除所有记录并重置自增ID、批量删除大量数据等,可以使用delete、truncate、drop等语句。 一、方法分类 二、具体方法 类型语句删除全部/部
2023-08-30

navicat怎么批量删除数据

批量删除数据:编写 sql 删除查询,如 delete from table_name;在 navicat sql 编辑器中执行查询;确认删除操作;验证删除成功,如刷新表视图或运行 select 查询。如何使用 Navicat 批量删除数据
navicat怎么批量删除数据
2024-04-24

mysql批量删除数据语句

使用 delete 语句配合 in 子句,指定要删除的行 id 列表,一次性删除多个行。MySQL 批量删除数据语句问题:如何在 MySQL 中批量删除数据?回答:可以使用 DELETE 语句配合 IN 子句一次性删除多个行。详细说明
mysql批量删除数据语句
2024-08-01

mysql怎么批量删除表数据

如果要批量删除表数据,可以使用以下方法:使用DELETE语句批量删除数据:DELETE FROM table_name WHERE condition;在上面的语句中,table_name是要删除数据的表名,condition是删除数据的条
mysql怎么批量删除表数据
2024-04-09

PHP中怎么批量删除数据

本篇文章为大家展示了PHP中怎么批量删除数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先在文章列表页面(list.php),将多选筐命名为:“$del_id[]”,值为文章ID号。 例如(li
2023-06-17

使用BULK INSERT大批量导入数据 SQLSERVER

要使用BULK INSERT在SQL Server中导入大批量数据,您需要按照以下步骤进行操作:1. 创建一个包含与目标表相同列的格式良好的文本文件。确保文件中的列顺序与目标表的列顺序一致。每行对应一个数据行,列之间使用分隔符分隔。例如,如
2023-08-17

oracle怎么批量删除数据库表

要批量删除数据库表,可以使用Oracle SQL的DROP TABLE命令。以下是一个示例:DROP TABLE table1, table2, table3;这将同时删除名为table1、table2和table3的三个表。要注意的是,
oracle怎么批量删除数据库表
2024-04-09

mysql中批量删除数据的方法

mysql中批量删除数据的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!mysql中批量删除数据的方法:首先找出符合条件的最大id;然后在where字段
2022-11-30

mysql怎么批量删除重复数据

要在MySQL中批量删除重复数据,您可以使用以下步骤:首先,您需要确定要删除的重复数据的列。假设您有一个表名为table_name,有一个列名为column_name,您想要删除column_name列中的重复数据。使用以下查询来查找重复数
mysql怎么批量删除重复数据
2024-04-09

SqlServer中BULK INSERT用法简介,批量插入数据

BULK INSERT是SqlServer中用于批量插入数据的命令。它可以将来自外部文件的数据快速加载到表中,比逐行插入数据的方式更高效。BULK INSERT的用法如下:1. 创建目标表:在执行BULK INSERT之前,需要先创建一个目
2023-09-16

mysql如何批量删除千万条数据

在MySQL中,可以使用DELETE语句结合LIMIT关键字来批量删除大量数据,以避免一次性删除所有数据导致性能问题或造成数据库锁定。例如,要删除一个表中的前1000万条数据,可以使用以下语句:DELETE FROM table_nam
mysql如何批量删除千万条数据
2024-04-09

redis怎么大批量删除缓存数据

要大批量删除Redis缓存数据,可以使用Redis的DEL命令来删除多个key。以下是一些方法:使用通配符删除:可以使用通配符来匹配多个key,然后一次性删除这些匹配的key。例如,可以使用如下命令来删除所有以"prefix:"开头的key
redis怎么大批量删除缓存数据
2024-04-09

编程热搜

目录