oracle删除一个单元格,【PL/SQL】四种删除表格数据的情况

本文探讨了在不同规模和场景下,如何选择最高效的删除策略:从少量数据的Delete/Where操作,到大规模数据的Truncate和MergeInto技巧,以及处理大量部门数据的临时表和增量同步。重点讲解了为何MergeInto在某些情况下优于Delete/Where,并给出了实际案例和优劣势分析。
摘要由CSDN通过智能技术生成

实际案例: 有以下几种不同的场景,对应使用不同的删除策略。

1460000023015136

第一种: 100万数据中删除部门10的数据。

分析: 量级比较少,直接可以用Delete和Where搭配删除。

第二种:将6000万的数据全部删除,Delete和Where搭配删除都可以,但是考虑到效率问题,直接用Truncate语法:Truncate table 表名.

第三种:将6000万的数据中删除部门10,Delete 可以用,但是删除的效率相当低,必须要循环6000万次,每次进行判断,然后才有效果。

这里需要引用Merge Into , 相当于增量同步插入后,增量更新数据,这个更新也包含删除。

语法格式:MERGE(不是所有数据库都通用)

MERGE INTO 目标表 USING (增量)

ON (匹配字段)

WHEN MATCHED THEN UPDATE SET --UPDATE和SET之间不需要加表名

WHEN NOT MATCHED THEN INSERT VALUE --INSERT和VALUES之间不需要加INTO 表名

Q: 请问这个不能直接用DELETE 语句?

A: 不行,因为当用匹配字段搭配后,我们必须要用Update语句。

Q:为什么一般来说,这个会比Delete加Where语句一起更好?

A: (我的个人理解,之后也许会更正)因为,自己和自己一起连接。

这里面把部门10看做了一个整体,当有匹配到这表里面部门10,有点像索引的意思。 那就判断如果匹配成功后就直接删除。

MERGE INTO EMP E

USING (SELECT * FROM EMP WHERE DEPTNO = 10) S

ON (S.EMPNO = E.EMPNO)

WHEN MATCHED THEN

UPDATE SET E.COMM = E.COMM DELETE WHERE 1 = 1;

第四种:本身部门10的数据量也很多,占据整个总表的95%以上。如果直接删除则很久才能执行。 思路在于:我们先创建一张临时表,然后只选择查询部门20,部门30,部门40即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值