Oracle sql优化示例

Posted jingweiyoung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 


以上是关于Oracle sql优化示例的主要内容,如果未能解决你的问题,请参考以下文章

Oracle游标sql语句代码块的优化

SQL查询优化Oracle

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

Oracle SQL调优

优化广泛使用 IN 子句的 Oracle SQL 查询