我想知道社区是否可以帮助我优化此查询但是可以获得相同的结果。目前,返回大约需要22分钟。我尝试了一些不同的东西但是花了更长时间。
感谢任何帮助!
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 :(得分: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)
。