在sqlplus写存储过程可以执行吗_优化体系--记一次生产数据库sql优化过程--修改索引...

概述

每个人都有自己优化sql的一些方式,这里主要记录一下我平时sql优化的大概过程,有改进的地方大家帮忙指点下。


问题sql

SQL(4kn1d3t4g6bq7) 在采样期平均单次执行逻辑读为 206338.55, 其最新执行计划涉及 3 个对象,平均单个对象的逻辑读较大。

在其最新执行计划中,发现较差的执行步骤:

3:TABLE ACCESS FULL (TABLE:RFUSER.DPCA_LJPL_XX_LJJHXX [1603 MB]);

1、查看具体sql:

select listagg(sql_text,' ') within group (order by piece) from v$sqltext where sql_id = '4kn1d3t4g6bq7' group by sql_id

sql如下:

UPDATE DPCA_LJPL_XX_LJJHXX SET ISSUMMARIZED = 0 WHERE ISSUMMARIZED = 1 AND CREATED_DATE > (SYSDATE - 1) AND BLBH NOT IN (SELECT DELIVERY_NOTE_ID FROM DPCA_DELIVERY_NOTE_SUM)

2、查看执行计划

这里可以看出DPCA_LJPL_XX_LJJHXX表走了全扫。

263fdc6892978d277d6bf801e90a93ec.png

3、获取sql相关信息

sqlplus / as sysdba @/home/oracle/sql/spoolsql.sql
42de4a9d5adaf0f8ee745ac5541183c5.png

查看相关字段及表段大小:

5f0a64a8af5419c0896586d4e9b9f705.png
c5278027e11ab1ce50b9d2b3254392e7.png

4、目前索引情况

这里可以看到 ISSUMMARIZED字段是已经有索引存在的。

f791ae1a25d0fbfd66c63837430e0a02.png

5、删除IDX_DPCA_LJPL_XX_LJJHXX_2索引,建立组合索引

drop index IDX_DPCA_LJPL_XX_LJJHXX_2;create index IDX_DPCA_LJPL_XX_LJJHXX_2 ON DPCA_LJPL_XX_LJJHXX(ISSUMMARIZED,CREATED_DATE) tablespace rf_indx ONLINE;

//分析索引

BEGINSYS.DBMS_STATS.GATHER_INDEX_STATS (OwnName => 'RFUSER', IndName => 'IDX_DPCA_LJPL_XX_LJJHXX_2', Estimate_Percent => 10, Degree => SYS.DBMS_STATS.DEFAULT_DEGREE, No_Invalidate => FALSE);END;

6、再次查看执行计划

加了组合索引后重新查看执行计划,并只留 ISSUMMARIZED字段看会不会走索引。

c84a7ecb95d34c81c7cf91b15f2c06c1.png

优化后结果:全表扫描改成索引范围扫描,cost由56022降为3,且查询只带ISSUMMARIZED字段仍然会走索引,但是代价会稍微提高。


后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值