楼主尝试一下执行的结果就知道了
select name,value from v$sysstat where name like '%parse%';
可以看硬解析的次数,比对以下两种情况下硬解析增加的次数和解析的总次数应该就很清楚了
select name,value from v$sysstat where name like '%parse%';
可以看硬解析的次数,比对以下两种情况下硬解析增加的次数和解析的总次数应该就很清楚了
解决方案 »
- 两个关于oracle的问题,非常简单,但是我是菜鸟
- 已知子记录,如何查父记录?
- ORACLE中写FUNCTION所遇到的问题,(急,急急!!)
- 急!一个行列转换统计的问题
- 请教,如何把oracle的数据导到sql server2000中(vb中实现)
- 从网上下载的Oracle9i简体中文版(三张碟),完成后是一大堆压缩格式的文件,没有一个类似setup之类的文件,如何安装啊!急!!!
- 数据导出问题
- ORACLE数据库语句是否有长度限制?
- 求SQL*PLUS帮助文件
- 请教一个有关去除重复的SQL语句问题
- Linux上面的ORACLE数据库,在一次关机后重启时,出现ORA-24324错误,请帮忙????
- 如何提高distinct的性能
for i to 100
begin
sql:= select * from student where name ='Robert' || i ;
end你就可以看是sql每次执行都要解释sql, 不会用cache中已经编译的sql语句.
此时如果把 name = 'Robert' || i 这个值换成绑定变量(bind parameter), 那么该sql执行解释一次, 从而提高效率.(大部分情况下, 应该使用bind parameter. )
如果你仅执行这样一条语句,不改变上述SQL中任何一个字符的话,效率自然是很高的,每一次都会从sql缓冲池中取得执行,只有第一次需要经过sql语法分析树进行解析,分析执行计划。
2.sql:= select * from student where name ='Robert' || i ;
因变量i的改动,每一次执行都为不同的SQL语句,每一次都需要进行解析执行。
3.sql := Select * from student where name = :Pname;
变量绑定方式为oracle内部认可的一种方式,而且安全性较高,无论变量:Pname赋为什么值,上述SQL语句仅为一条,仅需一次解析并将分析结果放入Library cache中的shared sql area.下次执行时直接从中获得。
我那个新同事还是写Oracle很久的家伙!看来也不是很专的人
查询的 Where 条件随着用户给出的查询值而不同!很显然我们的这种写法 Oracle很难SQL计划重用sql := Select * from student where name = :Pname;
这条语句 如果用户使用多次或者多个用户使用 那么他们将共用一个计划!终于明白了变量班定的道理!!
然后以后都是soft parse不过不好之处也有的.比如.一个表中A记录有一条.B记录有999999999999条.这样的话.如果先计划了=B
那么.执行A的时候也会选择执行B的执行路径了.