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;
- · ORACLE SQL性能优化系列(四)
- · ORACLE SQL性能优化系列(五)
- · ORACLE SQL性能优化系列(六)
- · ORACLE SQL性能优化系列(一)
- · JSP渐进学习教程7
- · JSP渐进学习教程6
- · JSP渐进学习教程5
- · JSP渐进学习教程9
- · JSP渐进学习教程8
- · 用多活动结果集优化ADO.NET2.0数据连接
- · PHP 5.0 的变化与PHP 6.0 展望
- · C#中从HTML生成DOM TreeView的代码
- · C#下从HTML文件生成DOM树
- · JSP渐进学习教程1
- · JSP渐进学习教程2
- · C#中的委托与事件[翻译]
- · 2分法-通用存储过程分页(top max模式)版本
- · 怎样获得Sqlserver 2000得实例列表和运行在一个实例上得数据库列表
- · 利用WWF进行ASP.NET程序开发
- · ASPImage组件的实现过程
- · Asp.net(c#)实现多线程断点续传
- · .NET中书写XML的一种简单方法
- · ASP.Net项目出错处理方法汇总
- · php中实现多线程
- · 用ASP实现开关IIS不重启电脑
- · 利用ASP发送和接收XML数据的处理方法
- · XMLHTTP对象应用开发初体验
- · 剖析ASP.NET2.0导航功能之控制地图信息
- · SQL Server 2005上市 竞争者称无新意
- · 利用XMLBean轻轻松松读写XML
- · SQL Server 2005 全新的数据整合服务
- · AMD与微软结盟推出Microsoft SQL Server 2005
- · PHP经典的给图片加水印程序
- · SQL Server 2005中的T-SQL增强
- · XMLHttpRequest和AJAX虎视Web应用开发
- · 用C#实现FTP搜索引擎
- · PHPMyAdmin上出现严重安全漏洞
- · 初学者入门:细述PHP4的核心Zend
- · JavaScript极速狂飙:CSS样式表的渲染效率
- · ASP中实现从dbf数据库导出数据到sql表
- · 用JavaScript绘图—JS2D函数集
- · 限制图片上传长宽的JavaScript代码
- · SQL Server 2005免费版本下载排行居首
- · 微软SQL Server 2005的30项顶尖特性
- · 监测你的SQL SERVER--让瓶颈暴露
- · ASP.NET四种页面导航方式之比较与选择
- · ASP.NET入门随想之博德之门 类与实例
- · 手把手教你建立ASP.NET开发平台
- · Lore Article.PHP SQL注入漏洞
- · 基于JDBC的数据库连接池技术研究与应用
- · ASP程序中使用断开的数据记录集
- · asp中vbscript访问xml文件
- · SQL中HAVING从句的用法
- · ASP.NET中随机数生成及应用
- · ASP.NET 翻页后继续维持排序
- · 深度解析ASP.NET2.0中的Callback机制
- · 用PHP编程读取汉字点阵数据
- · PHP开发中session应用详解
- · PHP中for循环语句的几种“变态”用法
- · SQL Server里函数的两种用法(可以代替游标)

