Related to Oracle SQL 关于优化,SQL语句的共享[笔记]

        每次执行SQL语句,ORACLE都会对其进行解析,并且ORACLE会将那些简单的不带连接的表查询缓存到SGA(system global area)的共享池(shared buffer pool)中,并且这个共享池会被所有数据库用户共享,可以在init.ora中设置这块缓存的大小,数值越大缓存的SQL语句越多,一旦使用了共享池中的SQL语句会大大提升查询性能。

    当你向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句.ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等).

     共享的语句必须满足三个条件:
     A.字符级的比较:当前被执行的语句和共享池中的语句必须完全相同.

例如:
SELECT * FROM EMP;
和下列每一个都不同
SELECT * from EMP;
Select * From Emp;
SELECT * FROM EMP;

 

 

B.两个语句所指的对象必须完全相同:

例如:
用户 对象名        如何访问
Jack
Plant_detail public synonym
Jill
Plant_detail table owner

 

以上是两个用户下的同名的两个表,如果针对不同用户的表查询的SQL语句即使字符完全相同也不会满足共享要求。

 

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;

 

你可能感兴趣的:(Related,to,Oracle,SQL,sql,oracle,优化,variables,buffer,system)