暂无图片
同一条sql语句,使用绑定变量和使用固定值,当传入值完全相同时,执行耗时差异很大。
我来答
分享
yclegend
2022-03-09
同一条sql语句,使用绑定变量和使用固定值,当传入值完全相同时,执行耗时差异很大。

同一条select 语句,分别使用绑定变量和固定值查询,两种情况传入值完全相同,但执行耗时差异很大。

数据库环境:oracle 11g 11.2.0.4


请教一下,出现这种情况,可能的原因有哪些?

我来答
添加附件
收藏
分享
问题补充
9条回答
默认
最新
DarkAthena

绑定变量其实就是不管你查询条件的具体值,它只按照更大概率优的情况来走执行计划。
但是当查询条件是某些特定值的时候,此时使用固定值可能更优。
所以你强调查询条件一样是没有任何意义的,绑定变量的SQL解析出来的是非固定值,这和你固定值肯定不一样。
这个时候可以采取指定hint或者改写执行计划的方式来让数据库按你想的方式来执行

暂无图片 评论
暂无图片 有用 0
暂无图片
吾喾

看执行计划,一定发生了改变。

暂无图片 评论
暂无图片 有用 0
yclegend

执行计划的确不一样,想知道可能的原因。

暂无图片 评论
暂无图片 有用 0
吾喾
暂无图片 评论
暂无图片 有用 0
yclegend

我的情况不太一样,都是第一次执行,差异就很大。

暂无图片 评论
暂无图片 有用 0
cqiwen

使用10046或10053事件trace看看详细的执行计划。

暂无图片 评论
暂无图片 有用 0
薛晓刚

比如数据倾斜。where a=1 和a=0 结果一共100万数据 1的有99万, 0有1万就会这样。

暂无图片 评论
暂无图片 有用 0
yclegend

查询条件完全一样

暂无图片 评论
暂无图片 有用 0
cqiwen

收集下直方图,如果查询的列中的值数据倾斜很大,则你直接代入值查询和使用变量查询时,它的执行计划会不一样。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏