ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 软解析 & 硬解析

软解析 & 硬解析

原创 Linux操作系统 作者:easonmy 时间:2008-08-11 14:58:34 0 删除 编辑

--软解析:  SQL语句完全匹配

--下面两个语句,需要硬解析(因为没有完全匹配)

select count(*) from t1 where id=5;

select count(*) from t1 where id=6;

--上面语句写成绑定变量形式就可以软解析

execute immediate 'select count(*) from t1 where id=:i' using x;

 

 

 

1: 软解析测试
SQL> SELECT NAME,VALUE
  2  FROM V$MYSTAT A,
  3       V$STATNAME B
  4  WHERE A.STATISTIC#=B.STATISTIC#
  5    AND NAME LIKE 'parse count%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
parse count (total)                                                      12
parse count (hard)                                                        0
parse count (failures)                                                    0

--使用绑定变量(软解析)

SQL> BEGIN
  2    for i in 1..10000 LOOP
  3           execute immediate 'insert into t1 values(:v1)' using i;
  4    end loop;
  5    commit;
  6  end;
  7  /

PL/SQL 过程已成功完成。

SQL> SELECT NAME,VALUE
  2  FROM V$MYSTAT A,
  3       V$STATNAME B
  4  WHERE A.STATISTIC#=B.STATISTIC#
  5    AND NAME LIKE 'parse count%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
parse count (total)                                                   10031
parse count (hard)                                                        1          #上面的操作没有产生什硬解析
parse count (failures)                                                    0

SQL> SET linesize 1000
SQL> col SQL_TEXT format a80
SQL> select SQL_TEXT,VERSION_COUNT,PARSE_CALLS,EXECUTIONS
  2  from v$sqlarea
  3  where upper(sql_text) like '%T1%'
  4    AND ROWNUM <10;

SQL_TEXT                                                                         VERSION_COUNT PARSE_CALLS EXECUTIONS
-------------------------------------------------------------------------------- ------------- ----------- ----------
insert into t1 values(:v1)                                                                   1       10000      10000

 

 

 

2: 硬解析测试

SQL> SELECT NAME,VALUE
  2  FROM V$MYSTAT A,
  3       V$STATNAME B
  4  WHERE A.STATISTIC#=B.STATISTIC#
  5    AND NAME LIKE 'parse count%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
parse count (total)                                                     194
parse count (hard)                                                       24
parse count (failures)                                                    0

--不使用绑定变量

SQL> BEGIN
  2    for i in 1..10000 LOOP
  3           execute immediate 'insert into t1 values('|| i|| ')';
  4    end loop;
  5    commit;
  6  end;
  7  /

PL/SQL 过程已成功完成。

SQL> SELECT NAME,VALUE
  2  FROM V$MYSTAT A,
  3       V$STATNAME B
  4  WHERE A.STATISTIC#=B.STATISTIC#
  5    AND NAME LIKE 'parse count%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
parse count (total)                                                   10287
parse count (hard)                                                    10050    #上面操作产生很多硬解析
parse count (failures)                                                    0

select SQL_TEXT,VERSION_COUNT,PARSE_CALLS,EXECUTIONS
from v$sqlarea
where upper(sql_text) like '%T1%';

SQL_TEXT                                                                         VERSION_COUNT PARSE_CALLS EXECUTIONS
-------------------------------------------------------------------------------- ------------- ----------- ----------
insert into t1 values(3818)                                                                  1        0     0
insert into t1 values(3819)                                                                  1        1     1
insert into t1 values(3820)                                                                  1        1     1
insert into t1 values(3821)                                                                  1        1     1
insert into t1 values(3822)                                                                  1        1     1
insert into t1 values(3823)                                                                  1        1     1
insert into t1 values(3824)                                                                  1        1     1
insert into t1 values(3825)                                                                  1        1     1
insert into t1 values(3826)                                                                  1        1     1

 

 

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

上一篇: 网络连接
下一篇: latch & lock
请登录后发表评论 登录
全部评论

注册时间:2008-06-20

  • 博文量
    17
  • 访问量
    17881