一、问题业务方一条sql语句很奇怪,执行时间0.4秒,数据量不大,两张表,每张表40万条数据,左连接,都有索引,where条件字段有索引。
看上面执行计划,是不是很完美。查询出来一条数据,谓词条件AGGREGATE_ORDER_NO = :1 也很完美,可以定位出来一条语句。二、分析 这个语句说简单其实很简单,2个表,左连接,每个表数据量40多万。执行计划也显示出完美情况来。但是在awr报表中这个语句平均执行时间0.4秒,按理来说,应该是0.01秒,或者0.00秒,忽略不计的呀。难道我这个执行计划有问题?不是真实的执行计划?三、检验是否是真实执行计划 看真实的执行计划,就用如下语句: ALTER SESSION SET STATISTICS_LEVEL=ALL; execute sql select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));用如上方法可以查看执行计划,因为使用了绑定变量,所以我设置一下
var vno varchar2(80)
exec :vno :='sjdkfjlks'
select a.PAY_TYPE, a.STORE_ID, a.AGGREGATE_ORDER_NO, a.TOTAL_PAYABLE_AMOUNT, a.ACTUAL_PAY_AMOUNT, a.CURRENCY, a.REMARK, a.AGGREGATE_ORDER_STATE, a.BUSINESS_ORDER_STATE, a.CREATE_TIME, a.BUSINESS_LINE, a.COMMENT_ORDER_STATE, a.REFUND_ORDER_STATE, a.SHOW_URL as SHOP_LOGO, a.STORE_NAME, a.BUSINESS_CONTENT, p.OUT_PAY_ORDER_NO, p.PAY_STATE from xxx_ORDER a left join xxx_order p on(a.pay_order_no = p.pay_order_no) where a.DEL_STATE = 10 and a.AGGREGATE_ORDER_NO = to_char(:vno) order by a.id desc 结果发现还是没有问题四、分析到这里好像进入了死胡同,执行计划没有问题,索引也有,但是执行时间就是下不来,而且还提示这个语句占用cpu巨多。思索了好几天,困扰了我好几天。后来灵机一闪,是不是应该把awr的执行计划调出来呢?用如下语句调用awr执行计划select * from table(dbms_xplan.display_awr('3ypyandfvscts',null,null,'all'));
仔细看上面执行计划,发现了没有,居然没有走索引扫描,而是走了全表扫描。不是有索引吗?百思不得姐五、看上面的分析,好像又陷入了死胡同,百思不得姐。为啥明明有索引,却不走索引呢?百度了一下,不走索引有哪些情况呢?
比较不匹配类型的数据类型
等于和范围索引不会被合并使用
WHERE子句中使用不等于条件
使用前导模糊查询
WHERE子句中使用函数
后来经过我和开发仔细对照,发现传给绑定变量的是数字,而不是字符串。所以,我做了如下实验发现,果然,如果是数字,会导致不走索引。
看到上面关键语句r((TO_NUMBER("A"."AGGREGATE_ORDER_NO")=:VNO,导致全表扫描。
六、结论出来了,改变也容易了。开发写错误,把是字符串类型写成数字类型。纠正过来就可以了,执行时间是0.00秒,问题解决。困扰我几天的问题解决了。百思不得姐
oracle执行计划------未走索引,隐式转换的坑
来源:这里教程网
时间:2026-03-03 16:32:37
作者:
编辑推荐:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- oracle执行计划------未走索引,隐式转换的坑
oracle执行计划------未走索引,隐式转换的坑
26-03-03 - 利用vmware创建rac共享磁盘
利用vmware创建rac共享磁盘
26-03-03 - awr-----一份经典的负载很高的awr报告
awr-----一份经典的负载很高的awr报告
26-03-03 - ORACLE dbca执行到40%报错之ORA-12154
ORACLE dbca执行到40%报错之ORA-12154
26-03-03 - 【/proc/文件浅析】另类办法恢复数据文件和控制文件
【/proc/文件浅析】另类办法恢复数据文件和控制文件
26-03-03 - 使用sql tuning advisor优化sql
使用sql tuning advisor优化sql
26-03-03 - Oracle监听日志清除
Oracle监听日志清除
26-03-03 - Oracle 19C RAC open_links_per_instance参数问题
- read by other session 等待事件分析
read by other session 等待事件分析
26-03-03 - Oracle sqlldr工具功能测试
Oracle sqlldr工具功能测试
26-03-03
