对OracleSQL相同语句的解析

在实际的应用中我们为了不重复的去解析相同的Oracle SQL语句,一般都会在***次解析完之后, 就把Oracle SQL语句存放在相关的内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。

十余年的杜集网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整杜集建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“杜集网站设计”,“杜集网站推广”以来,每个客户项目都认真落实执行。

因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, Oracle就能很快获得已经被解析的语句以及***的执行路径。 Oracle的这个功能大大地提高了Oracle SQL的执行性能并节省了内存的使用。

可惜的是Oracle只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询。数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。当你向Oracle 提交一个SQL语句,Oracle会首先在这块内存中查找相同的语句。

这里需要注明的是,Oracle对两者采取的是一种严格匹配,要达成共享,Oracle SQL语句必须完全相同(包括空格,换行等)。

共享的语句必须满足三个条件:

A. 字符级的比较:

当前被执行的语句和共享池中的语句必须完全相同。

例如:

 
 
 
  1. SELECT * FROM EMP;

和下列每一个都不同

 
 
 
  1. SELECT * from EMP;
  2. Select * From Emp;
  3. SELECT * FROM EMP;

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

例如:

用户 对象名 如何访问

 
 
 
  1. Jack sal_limit private synonym 
  2. Work_city public synonym 
  3. Plant_detail public synonym 
  4. Jill sal_limit private synonym 
  5. Work_city public synonym 
  6. Plant_detail table owner

考虑一下下列SQL语句能否在这两个用户之间共享。

C. 两个Oracle SQL语句中必须使用相同的名字的绑定变量(bind variables)

例如:***组的两个Oracle SQL语句是相同的(可以共享),而第二组中的两个语句是不同的(即使在运行时,赋于不同的绑定变量相同的值)

a.

 
 
 
  1. select pin , name from people where pin = :blk1.pin; 
  2. select pin , name from people where pin = :blk1.pin; 

b.

 
 
 
  1. select pin , name from people where pin = :blk1.ot_ind; 
  2. select pin , name from people where pin = :blk1.ov_ind; 

以上的相关内容就是对共享Oracle SQL语句的介绍,望你能有所收获。

文章出自:http://www.programbbs.com/doc/class10-2.htm

网页标题:对OracleSQL相同语句的解析
当前路径:http://www.shufengxianlan.com/qtweb/news5/522705.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联