select
<here I have functions like to_char, nvl, rtrim, ltrim, sum, decode>
from
table1
table2
where
joining conditions 1
joining conditions 2
group by
<here I have functions like to_char, nvl, rtrim, ltrim, sum, decode>
나는 프로덕션에서이 쿼리를 얻었고 조정할 몇 가지 솔루션을 제공해야한다고 생각했지만 그룹별로 inbex 기반의 함수를 사용하려고 생각했습니다. select 열은 색인 일 필요가 없다고 생각합니다. 나는 이틀 안에 환경을 얻을 것이다.하지만 그 전에는 다른 apporaches를 생각해 낼 필요가있다. 인덱스로 함수가 유용하다는 것을 확인하기 위해 필요한 것은 무엇입니까? 또한, 설명과는 별도로 DBA에게 다른 문서를 요청해야합니까?함수 기반 인덱스
SELECT
D_E_TRADE.DATE_VALUE,
to_char(D_E_TRADE.DATE_VALUE,'Mon-yyyy'),
NVL(P_DIM.P_NAME,' '),
rtrim(ltrim(P_DIM.C_CTRY)),
D_E_TRADE.YEAR,
L_E_DIM.L_CODE,
NVL(D_DIM.DESCR,' '),
(decode(D_DIM.DEPT_ID,'-1',' ',D_DIM.DEPT_ID)),
sum(A_CGE.TOTAL_CALC_NET_FEES),
L_E_DIM.L_NAME,
decode(A_CGE.E_M_CENTER,-9,0,A_CGE.E_M_CENTER),
NVL(F_DIM.S_DESC,'-1'),
sum(A_CGE.C_TOTAL_SHARES)
FROM
DATE_D D_E_TRADE,
P_DIM,
L_E_DIM,
D_DIM,
A_CGE,
F_DIM
WHERE
(D_E_TRADE.DATE_KEY=A_CGE.T_KEY )
AND (P_DIM.PARTY_KEY=A_CGE.E_P_KEY )
AND (F_DIM.F_T_KEY=A_CGE.F_T_KEY )
AND (L_E_DIM.L_E_KEY=A_CGE.L_E_KEY )
AND (D_DIM.DEPT_KEY=A_CGE.DEPT_KEY )
AND
(
rtrim(ltrim(P_DIM.C_CTRY)) = 'AC'
AND
(A_CGE.T_KEY >= (SELECT DATE_D_PROMPTS.DATE_KEY FROM DATE_D DATE_D_PROMPTS WHERE ( DATE_D_PROMPTS.DATE_VALUE = '01-01-2012 00:00:00' ))
AND
A_CGE.T_KEY <= (SELECT DATE_D_PROMPTS.DATE_KEY FROM DATE_D DATE_D_PROMPTS WHERE ( DATE_D_PROMPTS.DATE_VALUE = '31-08-2012 00:00:00' ))
AND
A_CGE.TRANS_REGION_KEY IN (SELECT REGION_KEY FROM REGION_DIM WHERE REGION_DIM.REGION_NAME IN ('Americas')) )
AND
(A_CGE.T_KEY >= (SELECT DATE_D_PROMPTS.DATE_KEY FROM DATE_D DATE_D_PROMPTS WHERE ( DATE_D_PROMPTS.DATE_VALUE = '01-01-2012 00:00:00' ))
AND
A_CGE.T_KEY <= (SELECT DATE_D_PROMPTS.DATE_KEY FROM DATE_D DATE_D_PROMPTS WHERE ( DATE_D_PROMPTS.DATE_VALUE = '31-08-2012 00:00:00' ))
AND
A_CGE.TRANS_REGION_KEY IN (SELECT REGION_KEY FROM REGION_DIM WHERE REGION_DIM.REGION_NAME IN ('Americas')) )
AND
('All Fees' IN ('2 - E','3 - P','4 - F','5 - C,') OR A_CGE.F_T_KEY IN (SELECT F_T_KEY FROM F_DIM WHERE (F_DIM.s_id) || ' - ' || (F_DIM.CHARGE_LVL1_NAME) IN ('2 - E','3 - P','4 - F','5 - C')) )
)
GROUP BY
D_E_TRADE.DATE_VALUE,
to_char(D_E_TRADE.DATE_VALUE,'Mon-yyyy'),
NVL(P_DIM.P_NAME,' '),
rtrim(ltrim(P_DIM.C_CTRY)),
D_E_TRADE.YEAR,
L_E_DIM.L_CODE,
NVL(D_DIM.DESCR,' '),
(decode(D_DIM.DEPT_ID,'-1',' ',D_DIM.DEPT_ID)),
L_E_DIM.L_NAME,
decode(A_CGE.E_M_CENTER,-9,0,A_CGE.E_M_CENTER),
NVL(F_DIM.S_DESC,'-1')
아니요, 그룹별로 FBI를 추가하는 것은 시작할 장소가 아니므로 필터링 (where 절)을보고 거기에서 할 수있는 작업 (색인 생성, 쿼리 변경 등)을 수행해야합니다. 지금은 너무 광범위하므로 계획을보고/설명하기 위해 SQL을 제공해야합니다. – DazzaL
나는 더 많은 설명을 위해 실제 SQL을 추가했다. –
설명 계획을 기다리고 있습니다. –