Oracle 关联表更新

这篇具有很好参考价值的文章主要介绍了Oracle 关联表更新。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

根据甲方要求,需要对大数据平台指定表(hive、impala表)的历史数据[2021-01-01至2023-03-29]指定字段进行批量更新,然后把表同步到Oracle。先更新大数据平台上的表,再把更新完成的表同步到Oracle。hive有8张表更新,其中4张大表【分区表】(数据量分别为:1038738976、260958144、25860509、2867005),另外4张小表(几万、二十几万的样子)。4张小表使用kettle直接全量同步到Oracle,另外4张大表数据量很大,使用kettle同步的话,时间也会很久而且不一定能成功,所以我决定在Oracle上直接更新。查看Oracle更新(牵涉7张表,其中4张表数据量少,几万二十几万的样子;3张数据量大),3张生产环境表(表1:136327470;表2:32311563;表3:2757935)高达亿级的数据量,需要更新的数据也有上亿、千万、百万,还需要连表查询。
开始使用update 语句直接更新的时候发现,50分钟都未能更新完成,使用了merge 后,速度有很大提升。

第一种情况:全删全插

1、备份数据

先备份表数据,以免删错数据:

create table 表名_bak_日期 as select * from 表名;

2、删除数据

三种方法:删除表(记录和结构)的语句delete、truncate、drop

drop命令

drop table 表名;

例如:删除学生表(student)
drop table student;

注意:用drop删除表数据,不但会删除表中的数据,连结构也会被删除!!!

truncate命令

truncate  table  表名;

例如:删除学生表(student)
truncate table student;

注意:
        1、用truncate删除表数据,只是删除表中的数据,表结构不会被删除!
        2、删除整个表的数据时,过程是系统一次性删除数据,效率比较高
        3、truncate删除释放空间

delete命令

delete from 表名;

例如:删除学生表(student)
delete from student;

注意:       
        1、用delete删除表数据,只是删除表中的数据,表结构不会被删除!
        2、虽然也是删除整个表的数据,但是过程是系统一行一行的删,效率比truncate低
        3、delete删除是不释放空间的

Truncate总结

  • truncate table在功能上与不带where子句的delete语句相同:二者均删除表中的全部行。
  • 但truncate比delete速度快,且使用的系统和事务日志资源少。
  • delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。所以可以对delete操作进行rollback。

1、truncate在各种表上无论是大的还是小的都非常快。如果有rollback命令delte将被撤销,而truncate则不会被撤销。

2、truncate是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对truncate使用rollback命令。

3、truncate将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过truncate操作后的表比delete操作后的表要快得多。

4、truncate不能触发任何delete触发器。

5、当表被清空后表和表的索引将重新设置成初始大小,而delete则不能。

6、不能清空父表

3、插入数据

insert into 表名A select * from 表名B;

第二种情况:不删除数据直接更新表

方法一:update

update 表1 b set b.PROJECTBELONG = (select distinct a.PROJECTBELONG from 表2 a 
where b.ROOT_ITEM_CODE = a.DESC1 
) 
where b.ROOT_ITEM_CODE in (select distinct a.DESC1 from 表2 a 
);

 上面的表1数据量275万条左右、表2数据量5万左右,说起来也不是特别大,但是这个语句执行起来特别的慢,我等了1个小时都没执行完,后来取消掉了更新。

建议:建索引稍微快一点。但我觉得不如merge into高效。

方法二:merge into

merge into 表1 t
using (select DESC1,PROJECTBELONG from 表2) s
on (t.ROOT_ITEM_CODE = s.DESC1 
--如果表数据量大,可以按照某个特定字段更新,我这里是按月更新
AND t.DATE_MONTH = '2022-04'
)
when matched then
update set t.PROJECTBELONG = s.PROJECTBELONG;

4百万的数据更新用时:1m31s

oracle update 多表关联更新,数据库,sql,mysql

补充:when matched then  还支持insert ,可以通过此sql 实现“存在即更新,不存在则插入”批量操作,可以大大减少数据库链接操作。文章来源地址https://www.toymoban.com/news/detail-615691.html

到了这里,关于Oracle 关联表更新的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Oracle、MySQL数据库常规命令语法-简易记录(非常规持续更新)

    前言:呈现的是非常基础必备命令以及常规关联语法,因涉及到不同数据库其表达都会有所区别,此篇纯属做个仓库记录更非常规持续更新,专业人士可忽略,且看且珍惜… MySQL: 关系型数据库、重点开源、支持大型规模、标准SQL数据语言、多平台多架构、高可用集群、可定

    2024年01月25日
    浏览(58)
  • 【笔记】oracle线上生产数据库使用exp的方式更新到本地

    今天的任务是:将线上老的数据库里的数据同步到本地现有的二期数据库中来,即二期项目需要线上数据进行最后测试,于是就有了今天这篇,线上生产数据库更新到本地数据库的笔记。 由于数据量较大,我尝试过将线上的表导出成一个个Excel或者insert语句来完成更新,但是

    2024年02月16日
    浏览(56)
  • 数据库将一张表中的数据更新到另一张表(Oracle、MySQL)

            方式一(推荐)         方式二         方式一比方式二效率快很多

    2024年02月07日
    浏览(70)
  • Oracle 关联表更新

    根据甲方要求,需要对大数据平台指定表(hive、impala表)的历史数据[2021-01-01至2023-03-29]指定字段进行批量更新,然后把表同步到Oracle。先更新大数据平台上的表,再把更新完成的表同步到Oracle。hive有8张表更新,其中4张大表【分区表】(数据量分别为:1038738976、260958144、2586

    2024年02月15日
    浏览(30)
  • 【Oracle】收集Oracle数据库内存相关的信息

    【声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) Oracle数据库包含多个内存区域,每个区域都包含多个子组件。 Oracle Database Memory Structures 根据具体问题的需要,可以通过如下命令收集Oracle数据库内存相关的信息。 例: 注:SET

    2024年01月21日
    浏览(71)
  • Oracle数据库面试题 精选 Oracle 面试题

    1.解释冷备份和热备份的不同点以及各自的优点 冷备份 发生在数据库已经正常关闭的情况下,将关键性文件拷贝到另外位置的一种说法。适用于所有模式的数据库。 优点 1. 是非常快速的备份方法(只需拷贝文件) 2. 容易归档(简单拷贝即可) 3. 容易恢复到某个时间点上(只

    2024年02月05日
    浏览(104)
  • MySQL数据库——MySQL UPDATE:修改数据(更新数据)

    在 MySQL 中,可以使用 UPDATE 语句来修改、更新一个或多个表的数据。 使用 UPDATE 语句修改单个表,语法格式为: 语法说明如下: 表名 : 用于指定要更新的表名称。 SET  子句: 用于指定表中要修改的列名及其列值。其中,每个指定的列值可以是表达式,也可以是该列对应的

    2024年02月12日
    浏览(57)
  • 【Oracle】使用 SQL Developer 连接 Oracle 数据库

    SQL Developer 是 Oracle 官方推出的一款免费的数据库开发工具,它提供了丰富的数据库开发功能,其中包括连接 Oracle 数据库的功能。 在本文中,我们将从多个方面详细阐述如何使用 SQL Developer 连接 Oracle 数据库。 在连接 Oracle 数据库前,需要需要做一些准备工作,包括安装 SQ

    2024年02月06日
    浏览(70)
  • Oracle数据库

    ①层次型数据库 ②网状型数据库 ③关系型数据库(主要介绍) E-R图:属性(椭圆形),实体(矩形),联系(菱形-一对一、一对多、多对多) 注:有的联系也有属性 关系型数据库的设计范式: 第一范式(1NF):属性不可再分,字段保证原子性 第二范式(2NF):在满足1

    2024年02月08日
    浏览(59)
  • Oracle 开发篇+Java通过HiKariCP访问Oracle数据库

    标签:HikariCP、数据库连接池、JDBC连接池、 释义:HikariCP 是一个高性能的 JDBC 连接池组件,号称性能最好的后起之秀,是一个基于BoneCP做了不少的改进和优化的高性能JDBC连接池。 ★ Java代码 ※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~

    2024年02月13日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包