Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

351

积分

0

好友

8

主题
1#
发表于 2012-5-13 19:35:32 | 查看: 3055| 回复: 1
版本是10.2.0.4

看下面这条语句:
select * from test where id = :1;

假设不同id的值语句的最优执行计划是不一样的,比如id=1时最优执行计划是索引扫描,而id=2时最优执行计划是全表扫描。
由于存在绑定变量窥视,所以假如第一次代入的值是1,那么下一次代入的值是2的时候语句也会走索引扫描,明显这个执行计划不是最优的。
当然取消绑定变量可以解决这个问题,但是假如这种语句很多的话会照成大量的硬解析。

刘大在这种情况下应该如何选择优化方案呢?
2#
发表于 2012-5-13 20:24:20
11g 之前针对存在严重列倾斜的 语句 应当区别对待, 对于 选择性好selective的情况继续使用绑定变量。  对于选择性较差 返回大量结果集 或者存在FULL TABLE SCAN的 输出变量 则却别对待。 这主要 通过程序层面来处理 , 如果无法从 程序层面解决,往往需要首先保证OLTP应用短查询可用。

11g以后提出了 adaptive cursor sharing 自适应游标的特性, 理论上可以有效解决 绑定变量带来的问题。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-15 15:50 , Processed in 0.071820 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569