易截截图软件、单文件、免安装、纯绿色、仅160KB

Oracle SQL的硬解析和软解析


 
说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的处理过程。当你发出一条sql语句交付Oracle,在执行和获取结果前,Oracle对此sql将进行几个步骤的处理过程:
    1、语法检查(syntax check)
    检查此sql的拼写是否语法。
    2、语义检查(semantic check)
    诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。
    3、对sql语句进行解析(prase)
    利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。
    4、执行sql,返回结果(execute and return)
    其中,软、硬解析就发生在第三个过程里。
    Oracle利用内部的hash算法来取得该sql的hash值,然后在library cache里查找是否存在该hash值;
    假设存在,则将此sql与cache中的进行比较;
    假设“相同”,就将利用已有的解析树与执行计划,而省略了优化器的相关工作。这也就是软解析的过程。
    诚然,如果上面的2个假设中任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作。这个过程就叫硬解析。
    创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。
这就是在很多项目中,倡导开发设计人员对功能相同的代码要努力保持代码的一致性,以及要在程序中多使用绑定变量的原因。
 
 
    /****************************************************/
    大家都在说在Sql中使用了Bind Var(绑定变量)会提高不少性能,那他到底是如何提高性能的呢?
    使用了Bind Var能提高性能主要是因为这样做可以尽量避免不必要的硬分析(Hard Parse)而节约了时间,同时节约了大量的CPU资源。
    当一个Client提交一条Sql给Oracle后,Oracle 首先会对其进行解析(Parse),然后将解析结果提交给优化器(Optimiser)来进行优化而取得Oracle认为的最


相关文档:

Oracle物化视图简介及实战

1.1.1             Oracle物化视图简介
1.     物化视图说明
物化视图 (Materialized View),在以前的Oracle版本中称为快照(Snapshot)。Oracle 的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果 ......

ORACLE多表查询优化

 转自某地,对作者很愧疚- -!不晓得地址了..
ORACLE多表查询优化
这里提供的是执行性能的优化,而不是后台数据库优化器资料:
参考数据库开发性能方面的各种问题,收集了一些优化方案统计如下(当然,象索引等优化方案太过简单就不列入了,嘿嘿):
执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用: ......

oracle更改归档路径

1.更改归档路径
在ORACLE10G中,默认的归档路径为$ORACLE_BASE/flash_recovery_area。对于这个路径,
ORACLE有一个限制,就是默认只能有2G的空间给归档日志使用,可以使用下面两个SQL语句去查看它的限制
1. select * from v$recovery_file_dest;
sql >show parameter db_recovery_file_dest(这个更友好直观一些)
当 ......

动态SQL基本语法

 1 :普通SQL语句可以用exec执行
Select * from tableName
exec('select * from tableName')
exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname fr ......

sql 经典一

1.建表
create table temp(rq varchar(10),shengfu nchar(1))
2.插入数据
insert into temp values('2005-05-09','胜')
insert into temp values('2005-05-09','胜')
insert into temp values('2005-05-09','负')
insert into temp values('2005-05-09','负')
insert into temp values('2005-05-10','胜')
insert i ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号