Oracle性能优化学习笔记之共享Sql语句

       为了不重复解析相同的SQL语句,在第一次解析之后,Oracle将SQL语句存放在内存中。这块位于系统全局区域SGA(systemglobal 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.两个语句所指的对象必须完全相同:
例如:


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;

小注:

       本文摘自百度文库,具体链接木有找到,抱歉。

时间: 2024-10-06 11:24:38

Oracle性能优化学习笔记之共享Sql语句的相关文章

Oracle性能优化学习笔记之选择最有效率的表名顺序

        选择最有效率的表名顺序(只在基于规则的优化器中有效)         ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二

Oracle性能优化学习笔记之WHERE子句中的连接顺序

        ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.         例如:        (低效,执行时间156.3秒) SELECT - FROM EMP E WHERE SAL > 50000 AND JOB = 'MANAGER' AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO);      

mysql性能优化学习笔记-参数介绍及优化建议

MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global 参数名=参数值; set @@global.参数名 :=参数值; 会话参数 set [session] 参数名=参数值; set @@session.参数名 :=参数值; 内存配置相关参数 确定可以使用的内存的上限 确定mysql每个连接使用的内存 sort_buffer_size:需要注意,每个

kvm虚拟化学习笔记(二十一)之KVM性能优化学习笔记

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1606422 本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6.x系列操作系统下KVM优化的点,有很多都是默认支持开启了的,除了采用virtio方式的磁盘IO,与网络IO接口

mysql性能优化学习笔记

mysql性能优化 硬件对数据库的影响 CPU资源和可用内存大小 服务器硬件对mysql性能的影响 我们的应用是CPU密集型? 我们的应用的并发量如何? 数量比频率更好 64位使用32位的服务器版本 32位不能使用超过4G的内容,因此选择的时候需要注意. myisam innodb 磁盘的配置和选择 机械硬盘: 存储容量 传输速度 访问时间 主轴转速 物理尺寸 使用RAID增加传统机器硬盘的性能 RAID:一系列小磁盘组成大磁盘,数据冗余 RAID 0 :成本最低,但是没有数据冗余会造成数据丢失

mysql性能优化学习笔记-存储引擎

mysql体系架构 客户端(java.php.python等) mysql服务层(连接管理器.查询解析器.查询优化器.查询缓存) mysql存储引擎(innodb.myisam等) 存储引擎针对表而言的,不针对库 mysql存储引擎 mysql存储引擎之MyISAM 5.5前默认的存储引擎.临时表(查询.排序时由查询优化器生成的表).系统表 特性: 并发性与锁级别(表级锁), 表损坏修复,检查check table tablename,修复repair table tablename 此外也可以

ORACLE性能诊断―学习statspack笔记(二)[概述]

oracle|笔记|性能 ORACLE性能诊断―学习statspack笔记(二)[概述]   作者:刘颖博 时间:2004-3-3 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   ORACLE性能诊断涉及对象   A.      服务器.网络以及磁盘(外部的环境) B.      实例(SGA,后台进程) C.      对象(表,索引,段--) D.     SQL E.      设计(指的是应用的设计,这部分一般说来是很难改变了)   ORACLE性能诊

ORACLE性能诊断―学习statspack笔记(一) [安装与测试]

oracle|笔记|性能 ORACLE性能诊断―学习statspack笔记(一)   作者:刘颖博 时间:2004-3-2 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   说明:oracle8.1.6开始引进statspack,statspack是诊断oracle性能的强有力的工具   安装前准备   A.首先是系统参数的确认: job_query_processes:为了建立自动任务,执行数据收集,该参数要大于0 time_statistics:为了收集操作

ORACLE性能诊断―学习statspack笔记(三)[表的分类]

oracle|笔记|性能 ORACLE性能诊断―学习statspack笔记(三)[表的分类]   作者:刘颖博 时间:2004-3-10 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   说明:STATSPACK并不能获取全面分析性能问题所需要的所有信息.特别是问题出在DISK,RAM,CPU以及NETWORK等数据库外部.   STATSPACK表的分类 A:控制表:stats$database_instance ,stats$snapshot B:参数表:s