国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Oracle快速插入數據append

2019-11-08 20:43:53
字體:
來源:轉載
供稿:網友

Oracle快速插入數據append

1:用merge into 進行匹配更新和插入,2: 開啟并行,提高速度3: 如果可以的話加NOLOGING 不寫入日志4:如果數據有規律的話,分批次執行

1.使用marge快速插入;

MERGE /*+ append */   INTO A dUSING (select * B where ...) f    ON (d.account_no = f.account_no)WHEN MATCHED THEN    update set acc_date = f.acc_date,...WHEN NOT MATCHED THEN    insert values ( f.account_no,f.acc_date..)/commit;

2.向表中插入兩條記錄

SQL> INSERT ALL  2     INTO toms values(1)  3     into toms values(2)  4     select * from dual;

已創建2行。

SQL> commit;

3.在插入時不記錄日志記錄的快速方法INSERT的時候可通過APPEND選項不產生歸檔日志。

alter table aa nologging

alter table aa logging

insert /*+append*/ into ...nologingselect * from ...

insert /*+ append, parallel */ into ods_list_t nologgingselect * from ods_list;

但這樣不行:整個表可以插入,但要某一個字段則不能加入nologginginsert /*+ append, parallel */ into ods_list_t(a,b) nologgingselect a,b from ods_list;

但可以這樣:insert /*+ append, parallel */ into ods_list_t  nologging(a,b)select a,b from ods_list;

create table ods_list_t nologging as select * from ods_list;

insert /*+ append, parallel */ into ods_list_t nologging select * from ods_list;

insert /*+ Append parallel(tablename,number) */ into ods_list_t nologging select * from ods_list;

tablename: 表名number: 并行度

4、使用批量拷貝方法set arraysize 20set copycommit 5000copy from username/passWord@oracle_name append table_name1using select * from table_name2;

--------------------------------------------------一、非歸檔模式下:沒有優化前    (1281372  redo size)1、單一的使用nologging參數,對redo的產生沒有什么影響。  (1214836  redo size)2、單一的使用append提示,redo的減少很顯著              (43872  redo size)3、nologging+append,更顯著                             (1108  redo size)

二、歸檔模式下:沒有優化前:            1、單獨使用nologging參數,(1231904  redo size)2、單獨使用append提示,  (1245804  redo size)3、nologging + append,     (3748  redo size)

a、使用nologging參數并不代表在dml操作中,oracle不產生redo,只是對于指定表的更新數據不產生redo,但是oracle還是要記錄這些操作,所以無論怎么優化,dml操作肯定要產生redo,但是使用這些參數對redo size的影響還是非常可觀的。b、單獨使用nologging參數,對redo size沒有多少影響,只有和append配合時,才能產生效果。c、單獨使用append提示,對redo的產生影響很大,這是我到現在都不明白的道理,按說append是繞過freelists,直接去尋找新塊,能減少對freelists的爭用,為什么會少這么多redo呢?d、歸檔模式和非歸檔模式下,參數影響不一樣,尤其是單獨使用append參數時,看來oracle對歸檔模式下出于安全考慮還是要多一些。 ---------------------------------------------------------------------------------

oracle append有什么作用?

請教一下,oracle中append是做什么用的。  insert /*+append*/ into table1 select * from table2在使用了append選項以后,insert數據會直接加到表的最后面,而不會在表的空閑塊中插入數據。使用append會增加數據插入的速度。/*+APPEND*/的作用是在表的高水位上分配空間,不再使用表的extent中的空余空間append 屬于direct insert,歸檔模式下append+table nologging會大量減少日志,非歸檔模式append會大量減少日志,append方式插入只會產生很少的undo不去尋找 freelist 中的free block , 直接在table HWM 上面加入數據。

1. 采用高速的存儲設備,提高讀寫能力,如:EMC 和NetApp,

2. 假如tab1表中的沒有數據的話 DROP   TABLE   TAB1;CREATE   TABLE   TAB1   AS   SELECT   *   FROM   TAB2;然后在創建索引

3. 用Hint 提示減少操作時間

    INSERT   /*+Append*/   INTO     tab1                 SELECT   *   FROM   tab2;

4. 采用不寫日志及使用Hint提示減少數據操作的時間。

建議方案是先修改表為不寫日志: sql> alter   table   table_name   NOLOGGING;

插入數據:

INSERT   /*+Append*/   INTO     tab1       SELECT   *   FROM   tab2;

插入完數據后,再修改表寫日志: sql> alter   table   table_name   LOGGING;

這里的區別就在于如果插入數據的同時又寫日志,尤其是大數據量的insert操作,需要耗費較長的時間。

5. 用EXP/IMP 處理大量數據

(1)給當前的兩個表分別改名 alter   table   tab1   rename   to   tab11; alter   table   tab2   rename   to   tab1; (2)導出改名前的tab2 exp   user/pwd@...   file=...   log=...   tables=(tab1) (3)把名字改回來 alter   table   tab1   rename   to   tab2; alter   table   tab11   rename   to   tab1; (4)導入數據 imp   user/pwd@...   file=...   log=...   fromuser=user   touser=user   tables=(tab1)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绵阳市| 尚志市| 城口县| 乐平市| 科技| 白城市| 盐边县| 三河市| 达拉特旗| 喀喇| 元谋县| 纳雍县| 抚州市| 七台河市| 遂宁市| 和林格尔县| 上思县| 昔阳县| 呼图壁县| 阿图什市| 抚顺市| 连山| 海伦市| 永福县| 泸定县| 班戈县| 通城县| 进贤县| 库尔勒市| 临武县| 淮安市| 那坡县| 双流县| 阳原县| 平远县| 永年县| 景东| 赞皇县| 清河县| 瑞丽市| 博客|