oracle大表複製

2021-05-23 16:57:30 字數 660 閱讀 8792

前幾天遇到乙個要求初始化資料的問題,表資料是千萬級別的,直接用update語句要乙個多小時,速度不能達到要求。經多方查詢和實踐發現,通過新建表的方式是最快的,僅需幾分鐘就ok了。今天又多查詢了乙個資料,做個總結.

oracle的insert、update和delete在執行過過程中都是會產生日誌的,因此,當插入大量資料的時候可以新增「nologging」選項,以提高執行速度,三種操作所做的具體東西而相關資料是這樣寫的:

常insert產生最少的undo,update產生的undo居中,而delete操作產生的undo最多。

對於insert操作,回滾段只需要記錄插入記錄的rowid,如果回退,只需將該記錄根據rowid刪除即可;

對於update操作,回滾段只需要記錄被更新欄位的舊值即可(前映象),回退時通過舊值覆蓋新值即可完成回退;

對於delete操作,oracle則必須記錄整行的資料,在回退時,oracle通過乙個反向操作恢復刪除的資料。

因此insert是最快的

所以當遇到大量資料修改的時候,可以考慮用insert來代替update。

例子:這兩種速度,差別是十幾倍。為什麼啊?

第一種屬於ddl語句,不產生redo,日誌量小

而第二種用到的insert 屬於dml,產生日誌,由於記錄多,產生的redo量也是很大的,還要寫很多log

針對Oracle大表執行表分析

報表 資料庫相當於乙個資料倉儲,資料量一般來說都比較大,這個時候效能就要特別注意。為了促使 oracle 選擇最優的執行計畫,最好定期進行表分析,以使oracle得到正確的統計資訊。一般如果資料分布和表結構發生變化的話,就要重新進行表分析。報表資料庫資料分布發生變化時有發生。所以建議報表庫進行定期的...

oracle 複製表結構及表資料

1 複製表結構以及資料 create table d table name as select from s table name 注意並不會建立索引 2 只複製表結構 create table d table name as select from s table name where 1 2 3...

Oracle 大表快速建立索引

第一步 show parameter workarea size policy alter session set workarea size policy manual 設定手動管理pga 第二步 show parameter sort area size 設定使用1g的pga alter ses...