这篇文章给大家分享的是有关如何提高SQL性能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1 该最开始的 sql 执行情况如下

SQL>SELECT2NVL(T.RELA_OFFER_SPEC_ID,SUBOS.SUB_OFFER_SPEC_ID)"offerSpecId"3FROMOFFER_SPEC_RELAT4LEFTJOINOFFER_SPEC_GRP_RELASUBOS5ONT.RELA_GRP_ID=SUBOS.OFFER_SPEC_GRP_ID6ANDsubos.start_dt<=SYSDATE7ANDsubos.end_dt>=SYSDATE8WHERET.RELA_TYPE_CD=29ANDt.start_dt<=SYSDATE10ANDt.end_dt>=SYSDATE11AND(T.OFFER_SPEC_ID=10991000061812OREXISTS13(SELECTA.OFFER_SPEC_GRP_ID14FROMOFFER_SPEC_GRP_RELAA15WHEREA.SUB_OFFER_SPEC_ID=10991000061816ANDT.OFFER_SPEC_GRP_ID=A.OFFER_SPEC_GRP_ID17))18ANDrownum<500;norowsselectedExecutionPlan----------------------------------------------------------Planhashvalue:1350156609

PredicateInformation(identifiedbyoperationid):---------------------------------------------------1-filter(ROWNUM<500)2-filter("T"."OFFER_SPEC_ID"=109910000618OREXISTS(SELECT0FROM"SPEC"."OFFER_SPEC_GRP_RELA""A"WHERE"A"."OFFER_SPEC_GRP_ID"=:B1AND"A"."SUB_OFFER_SPEC_ID"=109910000618))3-access("T"."RELA_GRP_ID"="SUBOS"."OFFER_SPEC_GRP_ID"(+))4-filter("T"."RELA_TYPE_CD"=2AND"T"."END_DT">=SYSDATE@!AND"T"."START_DT"<=SYSDATE@!)5-filter("SUBOS"."END_DT"(+)>=SYSDATE@!AND"SUBOS"."START_DT"(+)<=SYSDATE@!)6-access("A"."SUB_OFFER_SPEC_ID"=109910000618AND"A"."OFFER_SPEC_GRP_ID"=:B1)Statistics----------------------------------------------------------0recursivecalls0dbblockgets12444consistentgets0physicalreads0redosize339bytessentviaSQL*Nettoclient509bytesreceivedviaSQL*Netfromclient1SQL*Netroundtripsto/fromclient0sorts(memory)0sorts(disk)0rowsprocessedPLANGETDISKWRITEROWSROWSUSER_IO(MS)ELA(MS)CPU(MS)CLUSTER(MS)PLSQLEND_TIIHASHVALUEEXECPREEXECPREEXECPEREXECROW_PPREEXECPREFETCHPEREXECPREEXECPREEXECPEREXECPEREXEC

2 第一次分析
此时应该有以下个地方值得注意
1) 该 sql 每天执行上千次,平均每次执行返回不到 10 行数据,但是平均逻辑读达到1.2W,可能存在性能问题。
2)ID 为 4,5 的执行计划路径中出现了两个全表扫描,看到这儿我们可以想到可能是没有合适的索引导致走了全表扫描从而执行效率低下。
3)ID 为 2 的执行计划路径出现了 FILTER,且 3,和 6 为其子路径,如果FILTER有两个及两个以上的子路径,那么他的执行原理将类似于嵌套循环,id 号最小的子路径如果返回行数较多,可能会导致多次执行id号更小的子路径,导致性能低下。一般存在 “OR EXISTS” 的时候会出现此情况,可以根据情况避免。

感谢各位的阅读!关于“如何提高SQL性能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!