ITPub博客

首页 > 数据库 > Oracle > 绑定变量好在哪

绑定变量好在哪

原创 Oracle 作者:Rman2017 时间:2017-04-19 09:54:01 0 删除 编辑

清空共享池,关闭/重启DB

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup;

ORACLE instance started.


Total System Global Area  419430400 bytes

Fixed Size                  1267836 bytes

Variable Size             364906372 bytes

Database Buffers           50331648 bytes

Redo Buffers                2924544 bytes

Database mounted.

Database opened.


不使用绑定变量

SQL>set timing on

SQL> declare

type cur is ref cursor;

cur1 cur;

name varchar2(1000);

begin

for i in 1..1000 loop

open cur1 for 'select object_name from dba_objects where object_id=' || i;

fetch cur1 into name;

close cur1;

end loop;

end ; 

/


PL/SQL procedure successfully completed.


Elapsed: 00:00:05.72


SQL>select sql_text from v$sqlarea where sql_text like '%dba_objects%';

select object_name from dba_objects where object_id=70

select object_name from dba_objects where object_id=410

select object_name from dba_objects where object_id=884

select object_name from dba_objects where object_id=595

select object_name from dba_objects where object_id=687

select object_name from dba_objects where object_id=999

select object_name from dba_objects where object_id=831

select object_name from dba_objects where object_id=626

select object_name from dba_objects where object_id=596

select object_name from dba_objects where object_id=993

select object_name from dba_objects where object_id=907


SQL_TEXT

--------------------------------------------------------------------------------

select object_name from dba_objects where object_id=895

select object_name from dba_objects where object_id=408

select object_name from dba_objects where object_id=576

select object_name from dba_objects where object_id=506

select object_name from dba_objects where object_id=716

select object_name from dba_objects where object_id=129

select object_name from dba_objects where object_id=218

select object_name from dba_objects where object_id=319

select object_name from dba_objects where object_id=140

select object_name from dba_objects where object_id=196

select object_name from dba_objects where object_id=776


SQL_TEXT

--------------------------------------------------------------------------------

select object_name from dba_objects where object_id=84

select object_name from dba_objects where object_id=621

select object_name from dba_objects where object_id=368

select object_name from dba_objects where object_id=726

select object_name from dba_objects where object_id=424

select object_name from dba_objects where object_id=466

select object_name from dba_objects where object_id=444

select object_name from dba_objects where object_id=9

select object_name from dba_objects where object_id=284

select object_name from dba_objects where object_id=854

select object_name from dba_objects where object_id=387


SQL_TEXT

--------------------------------------------------------------------------------

select object_name from dba_objects where object_id=484

select object_name from dba_objects where object_id=1000

select object_name from dba_objects where object_id=138

select object_name from dba_objects where object_id=25

select object_name from dba_objects where object_id=416

select object_name from dba_objects where object_id=897

select object_name from dba_objects where object_id=162

select object_name from dba_objects where object_id=728

select object_name from dba_objects where object_id=102

select object_name from dba_objects where object_id=554

select object_name from dba_objects where object_id=508


SQL_TEXT

--------------------------------------------------------------------------------

select object_name from dba_objects where object_id=658

select object_name from dba_objects where object_id=480

select object_name from dba_objects where object_id=922

select object_name from dba_objects where object_id=951

select object_name from dba_objects where object_id=283


1003 rows selected.


Elapsed: 00:00:01.16



可以看到 该语句解析了1000次



使用绑定变量


SQL> alter system flush shared_pool;


System altered.


Elapsed: 00:00:00.52


SQL>set timing on

SQL> declare

type cur is ref cursor;

cur1 cur;

name varchar2(1000);

begin

for i in 1..1000 loop

open cur1 for 'select object_name from dba_objects where object_id=:x'using i;

fetch cur1 into name;

close cur1;

end loop;

end ;

 /


PL/SQL procedure successfully completed.


Elapsed: 00:00:00.15


SQL> select sql_text from v$sqlarea where sql_text like '%dba_objects%';


SQL_TEXT

--------------------------------------------------------------------------------

select object_name from dba_objects where object_id=:x

select sql_text from v$sqlarea where sql_text like '%dba_objects%'

declare type cur is ref cursor; cur1 cur; name varchar2(1000); begin for i in 1.

.1000 loop open cur1 for 'select object_name from dba_objects where object_id=:x

'using i; fetch cur1 into name; close cur1; end loop; end ;


Elapsed: 00:00:00.02

可以看到 该语句只解析了1次



计算解析时间:

SQL> SELECT (572-15)/572 FROM DUAL;


(572-15)/572

------------

  .973776224


Elapsed: 00:00:00.00


看到了吧,时间全都花在了语句解析上


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31448824/viewspace-2137561/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-03-30

  • 博文量
    352
  • 访问量
    132781