ORACLE SQL结果优化系列(二)

根源:网海拾贝




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;




版权声明: 原创作品,批准转载,转载时请务必以超链接情势标明文章 原始因由 、作者信息和本声明。不然将追查执法责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1976081.html