时间: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