包含绑定变量的sql进行调优需注意一点
拿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;
包含绑定变量的sql进行调优需注意一点的更多相关文章
- SQL Server调优系列基础篇
前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...
- SQL Server调优系列基础篇(索引运算总结)
前言 上几篇文章我们介绍了如何查看查询计划.常用运算符的介绍.并行运算的方式,有兴趣的可以点击查看. 本篇将分析在SQL Server中,如何利用先有索引项进行查询性能优化,通过了解这些索引项的应用方 ...
- SQL Server调优系列基础篇(子查询运算总结)
前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...
- SQL Server调优系列进阶篇(深入剖析统计信息)
前言 经过前几篇的分析,其实大体已经初窥到SQL Server统计信息的重要性了,所以本篇就要祭出这个神器了. 该篇内容会很长,坐好板凳,瓜子零食之类... 不废话,进正题 技术准备 数据库版本为SQ ...
- SQL Server调优系列基础篇 - 子查询运算总结
前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...
- SQL Server调优系列基础篇 - 性能调优介绍
前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...
- SQL Server 调优系列基础篇 - 子查询运算总结
前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴 ...
- SQL Server 调优系列基础篇 - 性能调优介绍
前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...
- SQL Server调优系列进阶篇(如何索引调优)
前言 上一篇我们分析了数据库中的统计信息的作用,我们已经了解了数据库如何通过统计信息来掌控数据库中各个表的内容分布.不清楚的童鞋可以点击参考. 作为调优系列的文章,数据库的索引肯定是不能少的了,所以本 ...
随机推荐
- 【旧文章搬运】Windbg+Vmware驱动调试入门(四)---VirtualKD内核调试加速工具
原文发表于百度空间,2009-01-09========================================================================== 今天又想起 ...
- iView 实战系列教程(21课时)_汇总贴
iView 实战系列教程(21课时)_汇总贴 课程地址; https://segmentfault.com/ls/1650000016424063 iView 实战系列教程(21课时)_1.iView ...
- django url 规则正确,却一直匹配错误,django url匹配错误的可能原因
首先看一下我想要匹配的规则如下 这个url之前设计的是 joke/index/ 后来需要加page参数就把'/'去掉了 然后再用 joke/index去访问页面时总显示 当我把鼠标放到对应连接时,显示 ...
- HDU6031:Innumerable Ancestors(二分+倍增数组)
传送门 题意 n个点的图,有n-1条无向边,m个询问,每次询问 给出两个集合a和b,找到a的一个元素x,b的一个元素y,使得x和y的lca深度最大 分析 这道题如果直接暴力做,复杂度为O(mk1k2* ...
- 【Tip】JavaScript
『JavaScript』 『引用网络资源』 JQuery <script src="http://code.jquery.com/jquery-latest.js">& ...
- 在IDEA中使用JSP中的out内置对象,out.println()——println红色解决方法
今天在学习JSP的时候,在jsp中使用out内置对象,开发工具用的是IDEA,结果如下图所示 郁闷了半天找度娘,可能关键字输的不准确,乱七八糟的方法一大堆,什么加依赖啊啥的,反正都不管用,最后找到一篇 ...
- hdu1811 Rank of Tetris 并查集+拓扑排序
#include <stdio.h> #include <string.h> #include <vector> #include <queue> us ...
- 洛谷1736(二维dp+预处理)
洛谷1387的进阶版,但很像. 1387要求是“全为1的正方形”,取dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1]))吧?这个有“只有对 ...
- [洛谷P3512 [POI2010]PIL-Pilots]
题目链接: 传送门走这里 题目分析: 感觉不是很难啊--不像是蓝题(AC量也不像)恶意评分? 少打了一个+1调了半天,就这样居然还能过60pts?我思路和题解第一篇高度重合是什么鬼啊,太过分了吧本来还 ...
- April Fools Contest 2017 F
Description You are developing a new feature for the website which sells airline tickets: being able ...