当前位置:Gxlcms > 数据库问题 > Oracle绑定变量优缺点

Oracle绑定变量优缺点

时间:2021-07-01 10:21:17 帮助过:25人阅读

参考:http://f.dataguru.cn/thread-208881-1-1.html

参考:http://blog.sina.com.cn/s/blog_4d9ece9a0100caw8.html

注:加粗皆为参考引用

不废话,直接说:

因为oracle对于sql语句的首先的解析逻辑,会先匹配是否可以软解析,不行则会进行硬解析,相对而言 硬解析比较麻烦。

select * from table where id = ‘1‘ 和 select * from table where id = ‘2‘ 会被当做不同的两条语句 执行硬解析。

如果此类sql 比较多,则大量的硬解析会造成latch的争用和访问阻塞等

 

而假如使用绑定变量

variable cnt number;

exec :cnt:=1; select * from table where id=:cnt; exec :cnt:=2; select * from table where id=:cnt; 则认为是相同语义的语句,不会执行多次硬解析。 以上为好处。   当然也有需要注意的坏处: 如果使用绑定变量,那么优化器就会忽略直方图的信息,在生成执行计划的时候可能不够优化。 先说直方图,它是优化器使用的一种统计数据,里面可以看出记录的分布情况,比如1-100有多少条,101-200有多少条记录,等等。 当id为索引时, 使用绑定变量会出现一个BUG。假设table中有10万条记录是id=1,10条记录是id=2,

variable cnt number;

exec :cnt:=1; select * from table where id=:cnt; 不走索引 exec :cnt:=2; select * from table where id=:cnt; 因为第一次执行 id = 1 ,第二次解析执行时,使用第一次的结果,不走索引   结论: 除非访问的索引字段倾斜性很严重,类似上面的例子,需要使用直方图的,其他情况,都可以使用绑定变量。如果需要使用直方图,建议还是别用绑定变量了。  

Oracle绑定变量优缺点

标签:acl   sele   com   html   相同   数据   number   绑定   oracle   

人气教程排行