2021-05-28
delete操作优化
问题描述:
看到有一个语句执行时间很长,拿出来看了看执行计划
如下:
Plan Hash Value : 3431444516
| Id | Operation | Name | Rows | Bytes | Cost | Time |
| 0 | DELETE STATEMENT | | 35771435 | 894285875 | 13427529 | 44:45:31 |
| 1 | DELETE | GJT_BALANCE | | | | |
| 2 | PARTITION RANGE ALL | | 35771435 | 894285875 | 13427529 | 44:45:31 |
| * 3 | TABLE ACCESS FULL | GJT_BALANCE | 35771435 | 894285875 | 13427529 | 44:45:31 |
Predicate Information (identified by operation id):
- 3 - filter(TO_CHAR(INTERNAL_FUNCTION(“CREATE_DATE”),‘yyyymmdd’)=TO_CHAR(SYSDATE@!,‘yyyymmdd’))
语句如下:
DELETE GJT_BALANCE
WHERE TO_CHAR(CREATE_DATE, ‘yyyymmdd’) = TO_CHAR(SYSDATE, ‘yyyymmdd’)
首先思路是:根据执行计划看operation项,发现只有一个表GJT_BALANCE ,where条件是create_date ,又看了表的对应列,有索引,但是在执行计划时,没有走索引而是走的table acces full,然后我就用hit 添加强制走索引,如下:**DELETE GJT_BALANCE
WHERE /+index(IDX_CREATE_DATE)/ TO_CHAR(CREATE_DATE, ‘yyyymmdd’) = TO_CHAR(SYSDATE, ‘yyyymmdd’) 但是执行还是没有变化,还是全表扫,有优化方面的大佬,就针对我描述的能给优化一下吗?
我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

评论





