3.共享SQL语句,为了不重复分析雷同的SQL语句,在第一次分析之后,ORACLE将SQL语句寄存在内存中.这块位于系统全局区域SGA(systemglobalarea)的共享池(s
3.共享SQL语句
为了不重复分析雷同的SQL语句,在第一次分析之后, ORACLE将SQL语句寄存在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被全部的数据库用户共享. 因此,当你执行一个SQL语句(偶尔被称为一个游标)时,若是它和之前的执行过的语句完全雷同, ORACLE就能很快获得已经被分析的语句以及最好的执行途径. ORACLE的这个屈从大年夜大年夜地提高了SQL的执行结果并节省了内存的运用.
可惜的是ORACLE只对俭朴的表提供高速缓冲(cache buffering) ,这个屈从并不合用于多表连接盘问.
数据库打点员必须在init.ora中为这个区域设置符合的参数,当这个内存区域越大年夜,就可以保存更多的语句,固然被共享的可以性也就越大年夜了.
当你向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找雷同的语句.
这里需求注明的是,ORACLE对两者回收的是一种严厉受室,要杀青共享,SQL语句必须
完全雷同(包括空格,换行等).
共享的语句必须满意三个前提:
A. 字符级的对比:
以后被执行的语句和共享池中的语句必须完全雷同.
例如:
SELECT * FROM EMP;
和下列每一个都不同
SELECT * from EMP;
Select * From Emp;
SELECT * FROM EMP;
B. 两个语句所指的工具必须完全雷同:
例如:
用户 工具名 怎样访谒
Jack sal_limit private synonym
Work_city public synonym
Plant_detail public synonym
Jill sal_limit private synonym
Work_city public synonym
Plant_detail table owner
思量一下下列SQL语句能否在这两个用户之间共享.
SQL
能否共享
启事
select max(sal_cap) from sal_limit;
不克不及
每个用户都有一个private synonym - sal_limit , 它们是不同的工具
select count(*0 from work_city where sdesc like 'NEW%';
能
两个用户访谒雷同的工具public synonym - work_city
select a.sdesc,b.location from work_city a , plant_detail b where a.city_id = b.city_id
不克不及
用户jack 议决private synonym访谒plant_detail 而jill 是表的全部者,工具不同.
C. 两个SQL语句中必须运用雷同的名字的绑定变量(bind variables)
例如:
第一组的两个SQL语句是雷同的(可以共享),而第二组中的两个语句是不同的(即便在运转时,赋于不同的绑定变量雷同的值)
a.
select pin , name from people where pin = :blk1.pin;
select pin , name from people where pin = :blk1.pin;
b.
select pin , name from people where pin = :blk1.ot_ind;
select pin , name from people where pin = :blk1.ov_ind;
版权声明: 原创作品,批准转载,转载时请务必以超链接情势标明文章 原始因由 、作者信息和本声明。不然将追查执法责任。