解析一个通过添加本地分区索引提高SQL性能的案
导读:1建站知识今天接到同事求助,说有一个select query,在Oracle上要跑一分多钟,他希望能在5s内出结果,以下就是解决这个问题的方网站建设公司营销型网站建设。
该sql如下:
复制代码 代码如下:
Select /*+ parallel(src, 8) */ distinct src.systemname as systemname , src.databasename as databasename , src.tablename as tablename , src.username as usernamefrom <STRONG>meta_dbql_table_usage_exp_hst</STRONG> src inner <STRONG>join DR_QRY_LOG_EXP_HST</STRONG> rl on <STRONG>src.acctstringdate = rl.acctstringdate and src.queryid = rl.queryid</STRONG> And Src.Systemname = Rl.Systemname and src.acctstringdate > sysdate - 30 And Rl.Acctstringdate > Sysdate - 30 inner join <STRONG>meta_dr_qry_log_tgt_all_hst </STRONG>tgt on upper(tgt.systemname) = upper('MOZART') And Upper(tgt.Databasename) = Upper('GDW_TABLES') And Upper(tgt.Tablename) = Upper('SSA_SLNG_LSTG_MTRC_SD') <STRONG>AND src.acctstringdate = tgt.acctstringdate and rl.statement_id = tgt.statement_id</STRONG> and rl.systemname = tgt.systemname And Tgt.Acctstringdate > Sysdate - 30 And Not( Upper(Tgt.Systemname)=Upper(src.systemname) And Upper(Tgt.Databasename) = Upper(Src.Databasename) And Upper(Tgt.Tablename) = Upper(Src.Tablename) ) And tgt.Systemname is not null And tgt.Databasename Is Not Null And tgt.tablename is not null
SQL的简单分析总得来看,这个SQL就是三个表(meta_dbql_table_usage_exp_hst,DR_QRY_LOG_EXP_HST,meta_dr_qry_log_tgt_all_hst)的INNER JOIN,这三个表数据量都在百万级别,且都是分区表(以acctstringdate为分区键),执行计划如下:复制代码 代码如下:
------------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost | Pstart| Pstop |------------------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 159 | 8654 | | || 1 | PX COORDINATOR | | | | | | || 2 | PX SEND QC (RANDOM) | :TQ10002 | 1 | 159 | 8654 | | || 3 | SORT UNIQUE | &nb网站建设多少钱sp; | 1 | 159 | 8654 | | || 4 | PX RECEIVE | | 1 | 36 | 3 | | || 5 | PX SEND HASH | :TQ10001 | 1 | 36 | 3 | | ||* 6 | TABLE ACCESS BY LOCAL INDEX ROWID| DR_QRY_LOG_EXP_HST | 1 | 36 | 3 | | || 7 | NESTED LOOPS | | 1 | 159 | 8633 | | || 8 | NESTED LOOPS | | 8959 | 1076K| 4900 | | || 9 | BUFFER SORT | | | | | | || 10 | PX RECEIVE | | | | | | || 11 | PX SEND BROADCAST | :TQ10000 | | | | | || 12 | PARTITION RANGE ITERATOR | | 1 | 56 | 4746 | KEY | 14 ||* 13 | TABLE ACCESS FULL | META_DR_QRY_LOG_TGT_ALL_HST | 1 | 56 | 4746 | KEY | 14 || 14 | PX BLOCK ITERATOR | | 8959 | 586K| 154 | KEY | KEY ||* 15 | TABLE ACCESS FULL | META_DBQL_TABLE_USAGE_EXP_HST | 8959 | 586K| 154 | KEY | KEY || 16 | PARTITION RANGE ITERATOR | | 1 | 个业网站建设公司 | 2 | KEY | KEY ||* 17 | INDEX RANGE SCAN | DR_QRY_LOG_EXP_HST_IDX | 1 | | 2 | KEY | KEY |------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 6 - filter("RL"."STATEMENT_网站建设公司ID"="TGT"."STATEMENT_ID" AND "RL"."SYSTEMNAME"="TGT"."SYSTEMNAME" AND "SRC"."SYSTEMNAME"="RL"."SYSTEMNAME") 13 - filter(UPPER("TGT"."SYSTEMNAME")='MOZART' AND UPPER("TGT"."DATABASENAME")='GDW_TABLES' AND UPPER("TGT"."TABLENAME")='SSA_SLNG_LSTG_MTRC_SD' AND "TGT"."ACCTSTRINGDATE">SYSDATE@!-30 AND "TGT"."SYSTEMNAME" IS NOT NULL "TGT"."DATABASENAME" IS NOT NULL AND "TGT"."TABLENAME" IS NOT NULL) 15 - filter("SRC"."ACCTSTRINGDATE"="TGT"."ACCTSTRINGDATE" AND (UPPER("TGT"."SYSTEMNAME")<>UPPER("SRC"."SYSTEMNAME") OR UPPER("TGT"."DATABASENAME")<>UPPER("SRC"."DATABASENAME") OR UPPER("TGT"."TABLENAME")<>UPPER("SRC"."TABLENAME")) AND "SRC"."ACCTSTRINGDATE">SYSDATE@!-30) 17 - access("SRC"."QUERYID"="RL"."QUERYID" AND "SRC"."ACCTSTRINGDATE"="RL"."ACCTSTRINGDATE") filter("RL"."ACCTSTRINGDATE">SYSDATE@!-30)
声明: 本文由我的SEOUC技术文章主页发布于:2023-05-22 ,文章解析一个通过添加本地分区索引提高SQL性能的案主要讲述分区,索引,SQL网站建设源码以及服务器配置搭建相关技术文章。转载请保留链接: https://www.seouc.com/article/web_5272.html