Oracle学习笔记--系列一(12)

(12)共享SQL减少硬解析

在这里插入图片描述

视频链接:
https://www.bilibili.com/video/BV1Zt411w7eQ?p=14&spm_id_from=pageDriver

1、SQL共享,绑定变量

例如下3条sql语句:

select /*hello*/ count(*) from t1 where OBJECT_ID=1;
select /*hello*/ count(*) from t1 where OBJECT_ID=2;
select /*hello*/ count(*)  from t1 where OBJECT_ID=1;

不能共享,必须一模一样才可以共享(空格、数值不一样、空格、回车等等)。

select sql_id,sql_text,executions from v$ sql where sql_text like '%hello%';

对sql语句解析时,首先分配一个sql_id

加强共享:

  • 统一书写风格
  • 使用绑定变量
declare v_sql varchar2(50)begin for i in 1..10000 loop
v_sql :='insert /*he1lo*/ into test values (:1);
execute immediate v_sql using i ;
end loop;
commit;
end;

:1 占位符,相当于绑定变量

SQL语句组成,动态部分、静态部分

cursor_sharing参数
SQL>show parameter cursor

SQL> alter system set session_cached_cursors=150 scope=spfile;
System altered.

2、找出没有共享的SQL语句

如何找出不能共享cursor的sql
在v$sqi查找执行次数较小的sql语句,观察这些sql语句是否是经常执行的。

select SQL_FULLTEXT from v$sql where EXECUTTONS=1 and sql_text like '%from t% ;
select SQL_FULLTEXT from v$sql where EXECUTIONS=1 order by sql_text;
--生成文件
SQL>spool 1.lst
SQL>select SQL_FULLTEXT from v$sql where EXECUTIONS=1 order by sql_text;
SQL>spool off

上一篇:Oracle学习笔记–系列一(11)
下一篇:Oracle学习笔记–系列一(13)

おすすめ

転載: blog.csdn.net/Ruishine/article/details/120763449