zoukankan      html  css  js  c++  java
  • SQL优化————Insert

    1.如果是非生产环境,可以先将索引和约束删掉,等数据插入完之后,再建立索引和约束。

    2.如果一次性插入数据较大,可以使用游标,每次小批量的插入数据。

    3.如果数据表太大,可以构建历史表,老数据通常不会再使用,可以将老数据、历史数据归档至历史表中,同样的,历史表数据插完之后再建索引等。

    4.并行select插入/*+PARALLEL(8)*/

     insert into tab1 select /*+ parallel */ * from tab2

    最大并发度初始化参数parallel_max_servers,并发的进程可以通过v$px_session查看,或者ps -ef |grep ora_p查看

    5.

    insert /*+APPEND*/
        into table NOLOGGING
    • 采用append插入的前提是该表上边没有大量的delete,
    • 需要该表的数据不重要,否则修改为nologging后万一数据丢失可能就找不回来
    • 还可以将索引也设置为nologging,毕竟索引记录redo也没啥用
    • 该方法适合单进程的串行方式,如果有多个进程同时运行时,后发起的进程会有enqueue的等待。注意此方法千万不能dataguard上用(不过要是在database已经force logging那也是不怕的,呵呵)!!

    6.并行插入

    alter session enable parallel dml;
    
          insert /*+ parallel */ into tab1 select * from tab2;

    7.对于分区表,可以构建多个进程进行插入数据。

    8.批量绑定(bulk binding),减少上下文切换。

    DECLARE
    
          TYPE array IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
    
          v_col1 array;
    
          v_col2 array;
    
          v_col3 array;
    
          BEGIN
    
          SELECT col1, col2, col3 BULK COLLECT
    
          INTO v_col1, v_col2, v_col3
    
          FROM tab2;
    
          FORALL i IN 1 .. v_col1.COUNT
    
          insert into tab1 WHERE tab1.col1 = v_col1;
    
          END;

    9.

      

  • 相关阅读:
    UVALive 5983 MAGRID DP
    2015暑假训练(UVALive 5983
    poj 1426 Find The Multiple (BFS)
    poj 3126 Prime Path (BFS)
    poj 2251 Dungeon Master 3维bfs(水水)
    poj 3278 catch that cow BFS(基础水)
    poj3083 Children of the Candy Corn BFS&&DFS
    BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)
    洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
    洛谷P3065 [USACO12DEC]第一!First!(Trie树+拓扑排序)
  • 原文地址:https://www.cnblogs.com/vitasoy/p/11743243.html
Copyright © 2011-2022 走看看