Hi everybody,
I am trying to find some Hint to the following query:
SELECT /*+ INDEX(GLTRANS,IGLTSET) */
GLTRANS.COMPANY,
F_GLLOCCODE(COMPANY, SUBSTR(acct_UNIT, 2, 2)) AS LOCATION,
GLTRANS.ACCT_UNIT,
GLTRANS.EFFECT_DATE,
RPAD(DA_NUMBER(SUBSTR(ACCT_UNIT, 5, 3)),4,' ') AS CL_MAJ,
sum(decode(GLTRANS.ACCOUNT, 500101,-1 * (GLTRANS.TRAN_AMOUNT),0)) vta_pesos
FROM GLTRANS
WHERE GLTRANS.COMPANY = 2000 AND
GLTRANS.EFFECT_DATE BETWEEN to_date('03/01/2008','mm/dd/yyyy') AND to_date('03/10/2008','mm/dd/yyyy') AND
GLTRANS.ACCT_UNIT LIKE rpad('T01-001',15,' ') AND
GLTRANS.ACCOUNT in (640142, 6301, 500101, 670103, 640143)
GROUP BY GLTRANS.COMPANY, GLTRANS.acct_UNIT, GLTRANS.EFFECT_DATE
The query it takes 8 seconds, but if I change with this work-around query (below), only takes 0.28 seconds:
SELECT /*+ INDEX(GLTRANS,IGLTSET) */
GLTRANS.COMPANY,
F_GLLOCCODE(COMPANY, SUBSTR(acct_UNIT, 2, 2)) AS LOCATION,
GLTRANS.ACCT_UNIT,
GLTRANS.EFFECT_DATE,
RPAD(DA_NUMBER(SUBSTR(ACCT_UNIT, 5, 3)),4,' ') AS CL_MAJ,
sum(decode(GLTRANS.ACCOUNT, 500101,-1 * (GLTRANS.TRAN_AMOUNT),0)) vta_pesos
FROM GLTRANS
WHERE GLTRANS.COMPANY = 2000 AND
GLTRANS.EFFECT_DATE IN (to_date('01/01/2008','mm/dd/yyyy'),
to_date('01/02/2008','mm/dd/yyyy'),
to_date('01/03/2008','mm/dd/yyyy'),
to_date('01/04/2008','mm/dd/yyyy'),
to_date('01/05/2008','mm/dd/yyyy'),...) AND
GLTRANS.ACCT_UNIT LIKE rpad('T01-001',15,' ') AND
GLTRANS.ACCOUNT in (640142, 6301, 500101, 670103, 640143)
GROUP BY GLTRANS.COMPANY, GLTRANS.acct_UNIT, GLTRANS.EFFECT_DATE
To put all the dates is not what I am lookig for, I want to know if I can put a Hint in the original query to force to use of the index in the right way.
The index "IGLTSET" of the table GLTRANS is formed in this way: COMPANY,EFFECT_DATE,ACCT_UNIT,ACCOUNT,SUB_ACCOUNT
Thank you.
I am trying to find some Hint to the following query:
SELECT /*+ INDEX(GLTRANS,IGLTSET) */
GLTRANS.COMPANY,
F_GLLOCCODE(COMPANY, SUBSTR(acct_UNIT, 2, 2)) AS LOCATION,
GLTRANS.ACCT_UNIT,
GLTRANS.EFFECT_DATE,
RPAD(DA_NUMBER(SUBSTR(ACCT_UNIT, 5, 3)),4,' ') AS CL_MAJ,
sum(decode(GLTRANS.ACCOUNT, 500101,-1 * (GLTRANS.TRAN_AMOUNT),0)) vta_pesos
FROM GLTRANS
WHERE GLTRANS.COMPANY = 2000 AND
GLTRANS.EFFECT_DATE BETWEEN to_date('03/01/2008','mm/dd/yyyy') AND to_date('03/10/2008','mm/dd/yyyy') AND
GLTRANS.ACCT_UNIT LIKE rpad('T01-001',15,' ') AND
GLTRANS.ACCOUNT in (640142, 6301, 500101, 670103, 640143)
GROUP BY GLTRANS.COMPANY, GLTRANS.acct_UNIT, GLTRANS.EFFECT_DATE
The query it takes 8 seconds, but if I change with this work-around query (below), only takes 0.28 seconds:
SELECT /*+ INDEX(GLTRANS,IGLTSET) */
GLTRANS.COMPANY,
F_GLLOCCODE(COMPANY, SUBSTR(acct_UNIT, 2, 2)) AS LOCATION,
GLTRANS.ACCT_UNIT,
GLTRANS.EFFECT_DATE,
RPAD(DA_NUMBER(SUBSTR(ACCT_UNIT, 5, 3)),4,' ') AS CL_MAJ,
sum(decode(GLTRANS.ACCOUNT, 500101,-1 * (GLTRANS.TRAN_AMOUNT),0)) vta_pesos
FROM GLTRANS
WHERE GLTRANS.COMPANY = 2000 AND
GLTRANS.EFFECT_DATE IN (to_date('01/01/2008','mm/dd/yyyy'),
to_date('01/02/2008','mm/dd/yyyy'),
to_date('01/03/2008','mm/dd/yyyy'),
to_date('01/04/2008','mm/dd/yyyy'),
to_date('01/05/2008','mm/dd/yyyy'),...) AND
GLTRANS.ACCT_UNIT LIKE rpad('T01-001',15,' ') AND
GLTRANS.ACCOUNT in (640142, 6301, 500101, 670103, 640143)
GROUP BY GLTRANS.COMPANY, GLTRANS.acct_UNIT, GLTRANS.EFFECT_DATE
To put all the dates is not what I am lookig for, I want to know if I can put a Hint in the original query to force to use of the index in the right way.
The index "IGLTSET" of the table GLTRANS is formed in this way: COMPANY,EFFECT_DATE,ACCT_UNIT,ACCOUNT,SUB_ACCOUNT
Thank you.