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.

      

  • 相关阅读:
    jQuery教程1,隐藏p标签
    Google 和 Microsoft 对 jQuery 的支持都很好。
    在编辑器中自动换行
    调用存储过程的一些方法
    jQuery教程2隐藏p标签内容按钮
    文件的复制,移动,创建
    网站中access数据库的备份和恢复
    修改文件名称
    生成静态网页,函数,引用过程
    网页中打印文本文件
  • 原文地址:https://www.cnblogs.com/vitasoy/p/11743243.html
Copyright © 2011-2022 走看看