2015-10-17 67 views
2

我想知道社区是否可以帮助我优化此查询,但获得相同的结果。目前,大概需要22分钟才能返回。我尝试了一些不同的东西,但花了更长的时间。PL SQL查询优化(目前很慢)

任何帮助表示赞赏!

GL_TYPE - SIZE 1MB 2409 ROWS 
GL_DEFINITION - SIZE 1MB 53 ROWS 
GL_JOURNAL - SIZE 1.24GB 5,725,500 or greater ROWS 


    SELECT MAX (CT.ENTITY_ID) ENTITY_ID, 
     MAX (CT.CASH_TYPE) RULE_CODE, 
     SUM (
      (SELECT NVL (SUM (JB.CLOSING_BALANCE), 0) 
       FROM GL_JOURNAL JB 
       WHERE  JB.GL_PRIME_ACCT = CD.GL_PRIME_ACCT 
        AND JB.GL_SUB_ACCT = CD.GL_SUB_ACCT 
        AND JB.ENTITY_ID = CT.ENTITY_ID 
        AND JB.GL_SYS_PERIOD = '201509' 
        AND JB.GL_BASIS = 'NA' 
        AND JB.GL_SOURCE <> '000')) as BEG_BALANCE 
    FROM GL_TYPE CT, GL_DEFINITION CD 
    WHERE CT.TYPE_CODE = CD.TYPE_CODE 
GROUP BY CT.ENTITY_ID, CT.TYPE_CODE 



SELECT STATEMENT 
COST 7 
    SORT AGGREGATE 
    BYTES: 45 Cardinality: 1 
     TABLE ACCESS BY INDEX ROWID TABLE GL_JOURNAL 
     COST 10 BYTES: 45 Cardinality: 10 
     INDEX RANGE SCAN INDEX 
     COST 3 Cardinality: 14 

     HASH GROUP BY 
     COST 7 BYTES: 69,861 CARDINALITY:2,409 

     #HASH JOIN 
      COST 5 BYTES: 412,467 CARDINALITY:14,223 
       INDEX FULL SCAN INDEX (UNIQUE) 
       COST 1: BYTES: 848 CARDINALITY:53 
       INDEX FAST FULL SCAN INDEX (UNIQUE) 
       COST 3 BYTES:31,317 CARDINALITY:2,409 
+0

fyi,这个问题与PL/SQL或'plsqldeveloper'标记无关。也许'sql-tuning'会更合适。 –

回答

1

我怀疑是子查询移动到from条款将是一个双赢:

SELECT MAX(CT.ENTITY_ID) as ENTITY_ID, 
     MAX(CT.CASH_TYPE) as RULE_CODE, 
     COALESCE(SUM(JB.CLOSING_BALANCE), 0) as BEG_BALANCE 
FROM GL_TYPE CT JOIN 
    GL_DEFINITION CD 
    ON CT.TYPE_CODE = CD.TYPE_CODE LEFT JOIN 
    GL_JOURNAL JB 
    ON JB.GL_PRIME_ACCT = CD.GL_PRIME_ACCT AND 
     JB.GL_SUB_ACCT = CD.GL_SUB_ACCT AND 
     JB.ENTITY_ID = CT.ENTITY_ID AND 
     JB.GL_SYS_PERIOD = '201509' AND 
     JB.GL_BASIS = 'NA' AND 
     JB.GL_SOURCE <> '000' 
GROUP BY CT.ENTITY_ID, CT.TYPE_CODE; 

此查询还希望采取指标的优势:GL_TYPE(TYPE_CODE)GL_DEFINITION(TYPE_CODE)GL_JOURNAL(GL_PRIME_ACCT, GL_SUB_ACCT, ENTITY_ID, GL_SYS_PERIOD, GL_BASIS, GL_SOURCE, CLOSING_BALANCE)

+0

我会试试看,这很有道理。我会运行一些测试。谢谢你的帮助。 – Christopher

+0

它的工作,我认为这是成功的。非常感谢! – Christopher

+1

@Christopher:如果答案适合您,请将其标记为“接受的答案”。这会给戈登带来好处,但也向其他人表明,你关心你得到的帮助。 – cfi