包含绑定变量的sql进行调优需注意一点
2024-09-08 02:35:05
拿1个sql举个例子,我只贴出了where后面部分
实际环境中有init_date 和direct_no的组合索引IDX_DATE_NO
上诉标红处,:b3=0 和:b3<>0这两种情况oracle在选择执行计划的时候会有很大的区别。
如果是:b3<>0,则oracle会在index_range_scan IDX_DATE_NO 时一次过滤出同时符合 init_date和direct_no列的数据。执行效果如下:
如果是:b3=0,则oracle会在index_range_scan IDX_DATE_NO 时只滤出符合 init_date列的数据。执行效果如下:
带有绑定变量的sql,oracle在选择执行计划的时候会相对保守,按照无法获知:b3输入值为前提条件,选择更为稳妥的只过滤init_date列的执行计划。在调优的过程中如果我们直接替换绑定变量成具体代入值,看到的执行计划只是雾里看花,花非花,雾非雾。不能表示最终的调优结果!
所以在对带有绑定变量的sql调优时,要严格按照定义绑定变量、赋值、执行的原则获取调优过程中的执行计划。
附上绑定变量值查询脚本,实际使用替换下sql_id。
select * from (select case CC.datatype_string when 'NUMBER' THEN 'var ' || substr((name),) || ' ' || datatype_string || ';'
ELSE 'var ' || substr((name),) || ' ' || datatype_string || ';' END as sqlbindss from (select *
from dba_hist_sqlbind a
where sql_id = 'gxbw9up2pw0fx'
order by last_captured) CC
where rownum <= (select count(*)
from dba_hist_sql_bind_metadata a
where sql_id = 'gxbw9up2pw0fx')
union
select case CC.datatype_string when 'NUMBER' then 'exec '||name||' := '|| value_string || ';'
ELSE 'exec '||name||' := '''|| value_string || ''';' END as sqlbindss
from (select *
from dba_hist_sqlbind a
where sql_id = 'gxbw9up2pw0fx'
order by last_captured) CC
where rownum <= (select count(*)
from dba_hist_sql_bind_metadata a
where sql_id = 'gxbw9up2pw0fx')) order by desc;
最新文章
- Spring学习系列(二) 自动化装配Bean
- 怎么在Microsoft Project中冻结列
- word 常用宏代码
- java中使用poi导入导出excel文件_并自定义日期格式
- 039. asp.netWeb用户控件之七实现具有虚拟键盘的功能的用户控件
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
- SQL SERVER中非聚集索引的覆盖,连接,交叉,过滤
- NetworkComms网络通信框架V3结构图
- mysql 获取季度的第一天 本月的第一天,本周的第一天sql语句(转)
- linux 发邮件
- 排序1,2......n的无序数组,时间复杂度为o(n),空间复杂度为o(1)
- go并发调度原理学习
- 基于Elastalert的安全告警剖析
- CSS iconfont阿里巴巴矢量图库在开发中实战使用
- Linux中DDNS配置
- Python函数之递归函数
- fiddler 使用记录
- C++——创建类的时候用new与不用new 的区别(转)
- SQL Server 2008 R2提示评估期已过
- oracle中rownum和row_number()
热门文章
- robotframework:appium切换webview后,在webview里滑动屏幕
- ASP.NET Core:创建一个Core项目
- CSS中style用法详解
- 怎么在notepad里面,将字符串替换成换行
- .net 下webservice 的WebMethod的属性
- hdoj1176【DP】
- python __builtins__ range类 (56)
- LuoguP2846[USACO08NOV]光开关Light Switching【线段树维护区间异或】By cellur925
- Counting The Important Pairs CodeChef - TAPAIR
- 微服务dubbo面试题