zoukankan      html  css  js  c++  java
  • Oracle sql优化示例

    1. 循环插入1到10w数值

     1 create or replace procedure proc_test 
     2 as
     3 begin
     4   for i in 1..100000
     5     loop
     6       execute immediate
     7       'insert into t values(' || i || ')';
     8       commit;
     9     end loop;
    10 end;
    11 /

    2. 使用变量绑定,减少sql解析

     1 create or replace procedure proc_test 
     2 as
     3 begin
     4   for i in 1..100000
     5     loop
     6       execute immediate
     7       'insert into t values(:x) ' using i; ---使用变量,sql只需解析一次,而第一种写法,需要解析1w次。
     8       commit;
     9     end loop;
    10 end;
    11 /

    3. 使用静态SQL,编译过程即完成解析,而动态SQL是在执行过程中解析的

     1 create or replace procedure proc_test 
     2 as
     3 begin
     4   for i in 1..100000
     5     loop
     6       --execute immediate 删除该行, execute immediate是一种动态SQL写法, 常用于表名,字段名是变量,入参的情况,但这里表名是已知的,直接用静态SQL即可,
    --静态SQL会自动使用绑定变量, 而且是在编译过程就解析好了,而动态SQL是在执行过程中解析的。
    7 insert into t values(i); 8 commit; 9 end loop; 10 end; 11 /

    4. 批量commit.

     1 create or replace procedure proc_test 
     2 as
     3 begin
     4   for i in 1..100000
     5     loop
     6       insert into t values(i);
     7     end loop;
     8     commit; --批量提交
     9 end;
    10 /

    5. 写成一条sql,由原来过程一条一条插入,变成一个集合的概念,一整批写入DATA BUFFER区。

    1 insert into t select rownum from dual connect by level<=1000000;
    2 commit;

    6. 直接路径方式插入数据,insert into t select ...是将数据先写入DATA BUFFER中,再刷到磁盘里,而create table t ...跳过了数据缓存区,直接写入磁盘。

    这种方式一般用于数据迁移。

    1 create table t as select rownum x from dual connect by level<=1000000;

     7. 还有一种方法,在多CPU机器上,关闭日志nologging,并且设置parallel 16 表示用到16个CPU。

    不过该方法会占用大量CPU资源,比较影响其他应用,使用时要三思而后行。

    1 create table t nologging parallel 16 
    2 as select rownum x from dual connect by level<=1000000;
  • 相关阅读:
    mysql设置用户密码规则
    jsonp格式前端发送和后台接受写法
    MySql数据库中正则表达式
    linux中服务(service)管理
    第50课 C++对象模型分析(上)
    第49课 多态的概念和意义
    第42课
    第41课
    深入理解MyBatis中的一级缓存与二级缓存
    hibernate一级缓存和二级缓存的区别
  • 原文地址:https://www.cnblogs.com/jingweiyoung/p/8494495.html
Copyright © 2011-2022 走看看