概述
每个人都有自己优化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表走了全扫。
![da747e1577762920b374eb2f03757e00.png](https://img-blog.csdnimg.cn/img_convert/da747e1577762920b374eb2f03757e00.png)
3、获取sql相关信息
sqlplus / as sysdba @/home/oracle/sql/spoolsql.sql
![225f282ec6effe3ccc0dcaedde5361ba.png](https://img-blog.csdnimg.cn/img_convert/225f282ec6effe3ccc0dcaedde5361ba.png)
查看相关字段及表段大小:
![933673dd652007f3b29a9cc70b14808b.png](https://img-blog.csdnimg.cn/img_convert/933673dd652007f3b29a9cc70b14808b.png)
![70bb58884b1d15004f5b8292e18b4419.png](https://img-blog.csdnimg.cn/img_convert/70bb58884b1d15004f5b8292e18b4419.png)
4、目前索引情况
这里可以看到 ISSUMMARIZED字段是已经有索引存在的。
![4bd450a523397eca5df91b5c52ab6e8b.png](https://img-blog.csdnimg.cn/img_convert/4bd450a523397eca5df91b5c52ab6e8b.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字段看会不会走索引。
![2e14ad7aaf33a211676f47085fae07b4.png](https://img-blog.csdnimg.cn/img_convert/2e14ad7aaf33a211676f47085fae07b4.png)
优化后结果:全表扫描改成索引范围扫描,cost由56022降为3,且查询只带ISSUMMARIZED字段仍然会走索引,但是代价会稍微提高。
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~
![0e018c185516e42f1067f9416fbc1825.gif](https://img-blog.csdnimg.cn/img_convert/0e018c185516e42f1067f9416fbc1825.gif)