ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

oracle sql优化随笔1

oracle sql优化随笔1 原始语句SELECT T1.I_CODE, T1.M_TYPE, T1.A_TYPE, T1.D_CODE, 0 AS B_TYPE FROM XIR_MD.TBND T1 WHERE T1.I_CODE NOT LIKE UL% AND T1.B_MTR_DATE 2026-09-12 AND T1.IMP_TIME 2026-09-22 03:05:39 UNION SELECT B.I_CODE, B.M_TYPE, B.A_TYPE, AS D_CODE, 1 AS B_TYPE FROM TTRD_BIDD_BOND A INNER JOIN TTRD_BIDD_INFO I ON A.D_CODE I.D_CODE INNER JOIN TTRD_BIDD_BOND_CODE B ON A.D_CODE B.D_CODE AND A.M_TYPE B.M_TYPE AND (B.OLD_I_CODE IS NULL OR B.OLD_I_CODE ) WHERE A.B_MTR_DATE 2026-09-12 AND A.IMP_TIME 2026-09-22 03:05:39 AND NOT EXISTS (SELECT I_CODE, M_TYPE, A_TYPE FROM XIR_MD.TBND BD WHERE A.I_CODE BD.I_CODE AND A.M_TYPE BD.M_TYPE AND A.A_TYPE BD.A_TYPE AND BD.I_CODE NOT LIKE UL%)执行计划执行时间00:01:50.19----------------------------------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | Reads | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 6110 (100)| | 0 |00:01:50.08 | 234K| 51208 | | 1 | SORT UNIQUE | | 1 | 18 | 5106 | 6110 (1)| 00:01:14 | 0 |00:01:50.08 | 234K| 51208 | | 2 | UNION-ALL | | 1 | | | | | 0 |00:01:50.08 | 234K| 51208 | |* 3 | TABLE ACCESS BY INDEX ROWID | TBND | 1 | 1 | 74 | 2549 (1)| 00:00:31 | 0 |00:01:47.99 | 225K| 42419 | |* 4 | INDEX RANGE SCAN | IDX_TBND_MTR_DATE | 1 | 3533 | | 13 (0)| 00:00:01 | 296K|00:00:01.47 | 912 | 851 | | 5 | NESTED LOOPS | | 1 | 17 | 5032 | 3560 (1)| 00:00:43 | 0 |00:00:02.09 | 8818 | 8789 | | 6 | NESTED LOOPS | | 1 | 105 | 5032 | 3560 (1)| 00:00:43 | 0 |00:00:02.09 | 8818 | 8789 | |* 7 | HASH JOIN ANTI | | 1 | 15 | 2190 | 3528 (1)| 00:00:43 | 0 |00:00:02.09 | 8818 | 8789 | |* 8 | INDEX FAST FULL SCAN | IDX_TTRD_BIDD_BOND_IMP_TIME | 1 | 1487 | 175K| 2435 (1)| 00:00:30 | 0 |00:00:02.09 | 8818 | 8789 | |* 9 | INDEX FAST FULL SCAN | PK_TBND | 0 | 863K| 20M| 1090 (1)| 00:00:14 | 0 |00:00:00.01 | 0 | 0 | |* 10 | INDEX RANGE SCAN | AK_KEY_2_TTRD_BID | 0 | 7 | | 2 (0)| 00:00:01 | 0 |00:00:00.01 | 0 | 0 | |* 11 | TABLE ACCESS BY INDEX ROWID| TTRD_BIDD_BOND_CODE | 0 | 1 | 150 | 4 (0)| 00:00:01 | 0 |00:00:00.01 | 0 | 0 | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- Elapsed: 00:01:50.19问题点在于UNION上半部分TBND表的回表过多占大头在跟业务确认过谓词条件无法做变更的情况下该sql的优化需求也比较强烈所以选择了添加更多的select列去消除索引该表变更动作较少create index idx_haha26 on XIR_MD.TBND(IMP_TIME,B_MTR_DATE,I_CODE,M_TYPE,A_TYPE,D_CODE,B_TYPE);新的执行计划执行时间00:00:00.08 -------------------------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | -------------------------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 3599 (100)| | 0 |00:00:00.05 | 8821 | | 1 | SORT UNIQUE | | 1 | 33 | 6216 | 3599 (1)| 00:00:44 | 0 |00:00:00.05 | 8821 | | 2 | UNION-ALL | | 1 | | | | | 0 |00:00:00.05 | 8821 | |* 3 | TABLE ACCESS BY INDEX ROWID | TBND | 1 | 16 | 1184 | 38 (0)| 00:00:01 | 0 |00:00:00.01 | 3 | |* 4 | INDEX RANGE SCAN | IDX_HAHA26 | 1 | 46 | | 3 (0)| 00:00:01 | 0 |00:00:00.01 | 3 | | 5 | NESTED LOOPS | | 1 | 17 | 5032 | 3559 (1)| 00:00:43 | 0 |00:00:00.05 | 8818 | | 6 | NESTED LOOPS | | 1 | 105 | 5032 | 3559 (1)| 00:00:43 | 0 |00:00:00.05 | 8818 | |* 7 | HASH JOIN ANTI | | 1 | 15 | 2190 | 3527 (1)| 00:00:43 | 0 |00:00:00.05 | 8818 | |* 8 | INDEX FAST FULL SCAN | IDX_TTRD_BIDD_BOND_IMP_TIME | 1 | 1487 | 175K| 2435 (1)| 00:00:30 | 0 |00:00:00.05 | 8818 | |* 9 | INDEX FAST FULL SCAN | PK_TBND | 0 | 689K| 16M| 1090 (1)| 00:00:14 | 0 |00:00:00.01 | 0 | |* 10 | INDEX RANGE SCAN | AK_KEY_2_TTRD_BID | 0 | 7 | | 2 (0)| 00:00:01 | 0 |00:00:00.01 | 0 | |* 11 | TABLE ACCESS BY INDEX ROWID| TTRD_BIDD_BOND_CODE | 0 | 1 | 150 | 4 (0)| 00:00:01 | 0 |00:00:00.01 | 0 | -------------------------------------------------------------------------------------------------------------------------------------------------------- Elapsed: 00:00:00.08问题解决。tips不建议这样大量增加select列去除回表条件允许的情况下优先操作谓词条件部分尝试业务沟通筛选度拉高。
返回列表