最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle關(guān)聯(lián)表更新操作指南

 更新時(shí)間:2023年07月22日 14:23:02   作者:AllenGd  
這篇文章主要給大家介紹了關(guān)于Oracle關(guān)聯(lián)表更新操作的相關(guān)資料, Oracle關(guān)聯(lián)更新是一種用于更新多表中某個(gè)表的數(shù)據(jù)時(shí),引用另一個(gè)表中的數(shù)據(jù),以避免數(shù)據(jù)錯(cuò)誤的技術(shù),需要的朋友可以參考下

背景:

根據(jù)甲方要求,需要對(duì)大數(shù)據(jù)平臺(tái)指定表(hive、impala表)的歷史數(shù)據(jù)[2021-01-01至2023-03-29]指定字段進(jìn)行批量更新,然后把表同步到Oracle。先更新大數(shù)據(jù)平臺(tái)上的表,再把更新完成的表同步到Oracle。hive有8張表更新,其中4張大表【分區(qū)表】(數(shù)據(jù)量分別為:1038738976、260958144、25860509、2867005),另外4張小表(幾萬(wàn)、二十幾萬(wàn)的樣子)。4張小表使用kettle直接全量同步到Oracle,另外4張大表數(shù)據(jù)量很大,使用kettle同步的話,時(shí)間也會(huì)很久而且不一定能成功,所以我決定在Oracle上直接更新。查看Oracle更新(牽涉7張表,其中4張表數(shù)據(jù)量少,幾萬(wàn)二十幾萬(wàn)的樣子;3張數(shù)據(jù)量大),3張生產(chǎn)環(huán)境表(表1:136327470;表2:32311563;表3:2757935)高達(dá)億級(jí)的數(shù)據(jù)量,需要更新的數(shù)據(jù)也有上億、千萬(wàn)、百萬(wàn),還需要連表查詢。

開始使用update 語(yǔ)句直接更新的時(shí)候發(fā)現(xiàn),50分鐘都未能更新完成,使用了merge 后,速度有很大提升。

第一種情況:全刪全插

1、備份數(shù)據(jù)

先備份表數(shù)據(jù),以免刪錯(cuò)數(shù)據(jù):

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

2、刪除數(shù)據(jù)

三種方法:刪除表(記錄和結(jié)構(gòu))的語(yǔ)句delete、truncate、drop

drop命令

drop table 表名;

例如:刪除學(xué)生表(student)
drop table student;

注意:用drop刪除表數(shù)據(jù),不但會(huì)刪除表中的數(shù)據(jù),連結(jié)構(gòu)也會(huì)被刪除?。?!

truncate命令

truncate  table  表名;

例如:刪除學(xué)生表(student)
truncate table student;

注意:
        1、用truncate刪除表數(shù)據(jù),只是刪除表中的數(shù)據(jù),表結(jié)構(gòu)不會(huì)被刪除!
        2、刪除整個(gè)表的數(shù)據(jù)時(shí),過程是系統(tǒng)一次性刪除數(shù)據(jù),效率比較高
        3、truncate刪除釋放空間

delete命令

delete from 表名;

例如:刪除學(xué)生表(student)
delete from student;

注意:       
        1、用delete刪除表數(shù)據(jù),只是刪除表中的數(shù)據(jù),表結(jié)構(gòu)不會(huì)被刪除!
        2、雖然也是刪除整個(gè)表的數(shù)據(jù),但是過程是系統(tǒng)一行一行的刪,效率比truncate低
        3、delete刪除是不釋放空間的

Truncate總結(jié)

  • truncate table在功能上與不帶where子句的delete語(yǔ)句相同:二者均刪除表中的全部行。
  • 但truncate比delete速度快,且使用的系統(tǒng)和事務(wù)日志資源少。
  • delete語(yǔ)句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng)。所以可以對(duì)delete操作進(jìn)行rollback。

1、truncate在各種表上無論是大的還是小的都非??臁H绻衦ollback命令delte將被撤銷,而truncate則不會(huì)被撤銷。

2、truncate是一個(gè)DDL語(yǔ)言,向其他所有的DDL語(yǔ)言一樣,他將被隱式提交,不能對(duì)truncate使用rollback命令。

3、truncate將重新設(shè)置高水平線和所有的索引。在對(duì)整個(gè)表和索引進(jìn)行完全瀏覽時(shí),經(jīng)過truncate操作后的表比delete操作后的表要快得多。

4、truncate不能觸發(fā)任何delete觸發(fā)器。

5、當(dāng)表被清空后表和表的索引將重新設(shè)置成初始大小,而delete則不能。

6、不能清空父表

3、插入數(shù)據(jù)

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

第二種情況:不刪除數(shù)據(jù)直接更新表

方法一: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數(shù)據(jù)量275萬(wàn)條左右、表2數(shù)據(jù)量5萬(wàn)左右,說起來也不是特別大,但是這個(gè)語(yǔ)句執(zhí)行起來特別的慢,我等了1個(gè)小時(shí)都沒執(zhí)行完,后來取消掉了更新。

建議:建索引稍微快一點(diǎn)。但我覺得不如merge into高效。

方法二:merge into

merge into 表1 t
using (select DESC1,PROJECTBELONG from 表2) s
on (t.ROOT_ITEM_CODE = s.DESC1 
--如果表數(shù)據(jù)量大,可以按照某個(gè)特定字段更新,我這里是按月更新
AND t.DATE_MONTH = '2022-04'
)
when matched then
update set t.PROJECTBELONG = s.PROJECTBELONG;

4百萬(wàn)的數(shù)據(jù)更新用時(shí):1m31s

補(bǔ)充:when matched then  還支持insert ,可以通過此sql 實(shí)現(xiàn)“存在即更新,不存在則插入”批量操作,可以大大減少數(shù)據(jù)庫(kù)鏈接操作。

總結(jié)

到此這篇關(guān)于Oracle關(guān)聯(lián)表更新操作的文章就介紹到這了,更多相關(guān)Oracle關(guān)聯(lián)表更新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決Oracle19c?ORA-00904:“WMSYS“.“WM_CONCAT“:標(biāo)識(shí)符無效問題

    解決Oracle19c?ORA-00904:“WMSYS“.“WM_CONCAT“:標(biāo)識(shí)符無效問題

    這篇文章主要介紹了解決Oracle19c?ORA-00904:“WMSYS“.“WM_CONCAT“:標(biāo)識(shí)符無效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Oracle中SQL*plus常用命令詳解

    Oracle中SQL*plus常用命令詳解

    在 Oracle 11g 數(shù)據(jù)庫(kù)系統(tǒng)中,用戶對(duì)數(shù)據(jù)庫(kù)的操作主要是通過 SQL*Plus 來完成的,下面將介紹如何啟動(dòng) SQL*Plus 和如何使用 SQL*Plus 連接到數(shù)據(jù)庫(kù),感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • Oracle Arraysize設(shè)置對(duì)于邏輯讀的影響實(shí)例分析

    Oracle Arraysize設(shè)置對(duì)于邏輯讀的影響實(shí)例分析

    這篇文章主要介紹了Oracle Arraysize設(shè)置對(duì)于邏輯讀的影響實(shí)例分析,通過設(shè)置Arraysize大幅減少了邏輯讀的次數(shù)和網(wǎng)絡(luò)往返次數(shù),需要的朋友可以參考下
    2014-07-07
  • 解決Oracle ORA-01017:invalid username/password:logon denied的問題

    解決Oracle ORA-01017:invalid username/password:logon

    這篇文章主要介紹了解決Oracle ORA-01017:invalid username/password:logon denied的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Windows10 x64安裝、配置Oracle 11g過程記錄(圖文教程)

    Windows10 x64安裝、配置Oracle 11g過程記錄(圖文教程)

    這篇文章主要介紹了Windows10 x64安裝、配置Oracle 11g過程記錄(圖文教程),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Oracle誤刪除DBF數(shù)據(jù)文件的恢復(fù)指南

    Oracle誤刪除DBF數(shù)據(jù)文件的恢復(fù)指南

    在Oracle數(shù)據(jù)庫(kù)管理中,數(shù)據(jù)文件(通常以.dbf為擴(kuò)展名)的丟失或誤刪除是一種非常嚴(yán)重的情況,可能會(huì)導(dǎo)致數(shù)據(jù)不可訪問甚至永久丟失,本文旨在為數(shù)據(jù)庫(kù)管理員提供處理Oracle數(shù)據(jù)庫(kù)中誤刪除DBF數(shù)據(jù)文件的有效策略和步驟,需要的朋友可以參考下
    2025-05-05
  • Oracle找出一個(gè)表的間接授權(quán)信息的方法

    Oracle找出一個(gè)表的間接授權(quán)信息的方法

    在Oracle中,查詢表授權(quán)需結(jié)合直接權(quán)限和通過視圖間接傳遞的權(quán)限,直接權(quán)限可通過ALL_TAB_PRIVS獲取,而間接授權(quán)需遞歸檢查視圖的授權(quán)鏈,本文給大家介紹Oracle找出一個(gè)表的間接授權(quán)信息的方法,感興趣的朋友一起看看吧
    2025-06-06
  • Oracle數(shù)據(jù)庫(kù)常用命令整理(實(shí)用方法)

    Oracle數(shù)據(jù)庫(kù)常用命令整理(實(shí)用方法)

    這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)常用命令整理(實(shí)用方法),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • oracle定時(shí)備份壓縮的實(shí)現(xiàn)步驟

    oracle定時(shí)備份壓縮的實(shí)現(xiàn)步驟

    本篇文章是對(duì)oracle定時(shí)備份壓縮的實(shí)現(xiàn)步驟進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Microsoft SQL Server 安全問題

    Microsoft SQL Server 安全問題

    Microsoft SQL Server 安全問題...
    2007-03-03

最新評(píng)論

桐梓县| 石首市| 航空| 怀化市| 高唐县| 义马市| 淮阳县| 七台河市| 黄浦区| 武强县| 比如县| 壤塘县| 桓台县| 定襄县| 扶风县| 宁化县| 海安县| 青铜峡市| 科技| 昂仁县| 长宁县| 开鲁县| 敦煌市| 梁平县| 商丘市| 华亭县| 昌宁县| 高密市| 开远市| 锡林郭勒盟| 天等县| 灵石县| 沈丘县| 海原县| 甘南县| 唐河县| 兴仁县| 焉耆| 察隅县| 河间市| 新建县|