为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:代码里一个查询SQL,采用的绑定变量传参,没有走索引,但是单独把SQL拿出来,放在管理工具窗口里,并且填上具体的变量值,看执行计划,走了索引,怎么解决呢
可以在管理工具中直接查看带?语句的执行计划,看是否一致。
另外可以尝试下收集此表的统计信息和将ADAPTIVE_NPLN_FLAG改为0关闭自适应计划
固定hint后如果没走想要的计划,可以尝试清理执行计划缓存
1、查询sql的cache_item
select * from V$CACHEPLN where sqlstr like ‘%sql代码%’;
2、清理sql对应的计划缓存
CALL SP_CLEAR_PLAN_CACHE(cache_item号);
有可能设置 绑定变量的过滤列 里的数据不均衡,也就是数据倾斜。为了解决这个问题,
方法一:取消绑定变量,改为字符拼接。
方法二:在此sql语句最外层select /+ OPTIMIZER_DYNAMIC_SAMPLING(11)/
可以尝试在管理工具的SQL直接使用?运行的时候输入参数值看看慢不慢
如果慢的话,可以在SQL最外层的select后面加上/+ENHANCE_BIND_PEEKING(1)/,比如select /+ENHANCE_BIND_PEEKING(1)/ … from
再执行一次,如果快了,可以把hint取消,还原SQL看看变快了没有
大佬,你语句块的执行计划怎么查看的啊?
文献参考:
https://eco.dameng.com/document/dm/zh-cn/pm/sql-tuning#23.6.2%20%E7%B4%A2%E5%BC%95%E6%8F%90%E7%A4%BA