索云科技oracle,oracle优化一则--不走索引

1、问题

一个查询未走索引,从一个视图中查询,视图定义为5张表的union all。

27d43961ac0382e1ae7be03c25f84993.png

有明显的条件TMH12 = '1001271876'

2、排查

@?/rdbms/admin/sqltrpt 脚本生成优化建议

通过建议来看,是生成索引的建议,对列进行格式转换,TO_CHAR("TMH12"),

1- Index Finding (see explain plans section below)

The execution plan of this statement can be improved by creating one or more

indices.

Recommendation (estimated benefit: 99.48%)Consider running the Access Advisor to improve the physical schema design

or creating the recommended index.

create index HICANO_POS.IDX

$$_20260001 on HICANO_POS.E_CPHPDA(TO_CHAR("TMH12")); - Consider running the Access Advisor to improve the physical schema design or creating the recommended index. create index HICANO_POS.IDX$$

_20260002 onHICANO_POS.E_CPXSDA(TO_CHAR("TMH12"));Consider running the Access Advisor to improve the physical schema design

or creating the recommended index.

create index HICANO_POS.IDX

$$_20260003 on HICANO_POS.E_JLZCPCPXXMXB("TMH8"); - Consider running the Access Advisor to improve the physical schema design or creating the recommended index. create index HICANO_POS.IDX$$

_20260004 onHICANO_POS.E_CPTHDA(TO_CHAR("TMH12"));

我们先不急去创建这样的索引,先看看为什么进行了格式转换,从执行计划中也看到了filter进行了to_char转换,

c811545e433e427d870a0e542b9b602b.png

查看表定义发现有三张表的TMH2字段是number类型的,第四张表对应的union字段是varchar类型的,

64b892360ecdc9d35b9fabdb1d73505b.png

实际上是牺牲了3个表的字段转换,去适应一张表的varchar类型,要么从表涉及字段上统一,要么牺牲一张表去换三张表的性能。

3、调整

7577d51a717c493c1dc2c3cdf763a5fc.png

调整后由原来的30ms下降到11ms,

Elapsed: 00:00:00.30--》Elapsed: 00:00:00.10,提升2倍速度,执行计划time由25s下降到1s,cost从2049 下降到21

2d2aca6a90c705279016a8474b525235.png

b0d862b45a0cadae44f14c7d2e46ef4d.png

4、总结

字段类型转换会造成无法使用索引的情况,如果非要进行转换,可以创建带有转换类型的索引,函数索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值