包含绑定变量的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调优系列进阶篇(如何索引调优)
前言 上一篇我们分析了数据库中的统计信息的作用,我们已经了解了数据库如何通过统计信息来掌控数据库中各个表的内容分布.不清楚的童鞋可以点击参考. 作为调优系列的文章,数据库的索引肯定是不能少的了,所以本 ...
随机推荐
- Java泛型简明教程
泛型是Java SE 5.0中引入的一项特征,自从这项语言特征出现多年来,我相信,几乎所有的Java程序员不仅听说过,而且使用过它.关于Java泛型的教程,免费的,不免费的,有很多.我遇到的最好的教材 ...
- 6-8 adaboost分类器2
重点分析了Adaboost它的分类结构,以及如何使用Adaboost.这一节课讲解Adaboost分类器它训练的步骤以及训练好之后的XML文件的文件结构.所以这节课的核心是Adaboost分类器它的训 ...
- CodeForces - 55D && UVALive - 6528
A. 问L到R有多少能被自己各个数位上的非零数字整除的数字. 关键在于dp的状态:注意到这里有三个关键属性:当前数位,2~9出现的情况(0,1不用管), 原数字取余2520的结果(2~9的最小公倍数) ...
- 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时4
课时4 数据驱动的图像分类:K最邻与线性分类器(上) 图像分类之前,我们需要将图片转换成一张巨大的数字表单,然后从所有种类中,给这个表单选定一个标签. 为什么分类问题是个困难的问题:图像分类难点是,当 ...
- poj1338【丑数·DP】
我记得这道题以前写过,而且是写出来了.DP吧. 然后现在想了好久...没想出来.... 然后考虑一下递推..mdzz-直接就是让之前的这个每次乘以2,3,5就好了嘛,然后每轮取最小. //#inclu ...
- HDOJ1864(水的可怜)
注意这句话:精确到小数点后两位如果是小数点的话 HDOJ1864 #include<stdio.h> #include<iostream> #include<algori ...
- hdoj1116【欧拉回路】
题意: 应该是求一个路径让所有的单词能够首尾连起来,不需要头和尾的单词也连起来...应该很容易懂吧...我这里讲的好烂.. 思路: 从欧拉回路的定义引申过来. 1. 连通. 2. 入度和出度问题. 问 ...
- poj1661【DP,左右两端dp】
/* [过滤这一段~~~] 一开始想的[错误的,为自己的总结的写的,读者略过]: 每个状态的点肯定是高度,那么我DP每一层,这样的话就有一层循环,其实这无关复杂度,不会很多时间 错误的是想法是从最高层 ...
- 解决 Xshell 连接出现 The remote SSH server rejected X11 forwarding request 问题
问题描述 使用 Xshell 5 首次连接虚拟机 CentOS 7.6 出现这样的提示: WARNING! The remote SSH server rejected X11 forwarding ...
- Python基础知识(2)
1:if比较运算符.and.or >=:大于或者等于 <=:小于或者等于 ==:等于 !=:不等于 (<>:也是不等于,在Python2中可用.Python3中无法使用) a ...