Welcome 微信登录

首页 / 数据库 / MySQL / Oracle数据库测试数据插入速度

一,没有优化的速度:Executed in 69.436 secondsdrop table t purge;
create table t(x int);
/*清空共享池,注意在生产环境中千万不能做这步操作*/
alter system flush shared_pool;create or replace procedure proc1
as
begin
for i in 1 .. 100000
loop
execute immediate
"insert into t values("||i||")";
commit;
end loop;
end;
/下面查看下proc1插入100000记录的执行时间
SQL> set timing on;
SQL> exec proc1;

PL/SQL procedure successfully completed

Executed in 69.436 seconds /*我们可以通过下面的语句查看此存储过程执行的具体步骤*/
select t.sql_text,t.sql_id,t.parse_calls,t.executions from v$sql t where sql_text like "%insert into t values%";为了方便查看我用PL/SQL DEVELOPER 执行的上面语句,如下图:从上面可以看出,每个语句都只是解析了一次,执行了一次,一共解析了10万次,也许你会问你上面只有7136行记录啊,你怎么说是解析了10万次呢。我可以告诉你肯定是解析了10万次,因为我的共享池空间不大,容纳不小10万条信息,根据FIFO 的原理你可以看出,现在我查出来的都是从92000多开始的SQL STATEMENT记录。我们知道这些SQL语句都是相似的没有必要解析10万次,即每一条语句都解析一次。这个PROC1 没有用绑定变量,这就是我们可以优化的地方。我们用绑定变量来重新测试下,下面的PROC2就只用解析一次就可以了,当然速度肯定会提高不少。 二,使用绑定变量优化后的速度:Executed in 26.505 secondsdrop table t purge;
create table t(x int);
/*清空共享池,注意在生产环境中千万不能做这步操作*/
alter system flush shared_pool;
create or replace procedure proc2
as
begin
for i in 1 .. 100000
loop
execute immediate
"insert into t values(:x)" using i;
commit;
end loop;
end;
/SQL> set timing on;
SQL> exec proc2;

PL/SQL procedure successfully completed

Executed in 26.505 seconds从上面可以看出,时间基本上减少了一半。/*我们可以通过下面的语句查看此存储过程执行的具体步骤*/
select t.sql_text,t.sql_id,t.parse_calls,t.executions from v$sql t where sql_text like "%insert into t values%" order by 1;从上面的执行情况可以知道,解析了一次,执行了10万次。完全符合我们的猜想,所以速度大大提升了。execute immediate是一种动态SQL的写法,常用于表名字段名是变量,入参的情况,由于表名不知道,所以不能直接写SQL ,所以要靠动态SQL语句传人表名和字段名参数拼接成SQLSTATEMENT,有execute immediate调用执行。但是我的这个例子完全可以不需要动态的,可以用静态的写好。 更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-04/100538p2.htm
  • 1
  • 2
  • 下一页
使用IF NOT EXISTS创建数据表Oracle如何保持一致性读?相关资讯      Oracle数据库 
  • Oracle数据库全球化  (03月01日)
  • Oracle数据库日期过滤方法性能比较  (02/02/2015 13:20:26)
  • Oracle数据库安装中端口被占用问题  (10/29/2014 07:42:24)
  • 在CentOS 6.6上搭建C++运行环境并  (10/10/2015 19:44:40)
  • Oracle数据库无法使用localhost和  (11/14/2014 16:39:10)
  • Oracle 多数据库的数据同时更新  (06/16/2014 21:52:23)
本文评论 查看全部评论 (0)
表情: 姓名: 字数

版权所有©石家庄振强科技有限公司2024 冀ICP备08103738号-5 网站地图