테마
CRM팀의 「VIP 상품평 활동」은 A 등급 고객 20명마다 1년 동안 남긴 상품평 건수와 평균 평점을 보여 준다. 평가를 하나도 남기지 않은 VIP도 0건으로 보여야 해서 아우터 조인으로 썼다. 화면을 연 CRM 담당자가 "VIP는 20명인데 목록이 2,000줄이고, 평가가 0건인 VIP가 일반 고객 사이에 묻혀서 안 보인다"라고 했다. 아래는 2023-07-01 ~ 2024-06-30으로 조회한 실행계획이다.
M_CUS: 2,000행 · 30블록 · PK_M_CUS (CUS_ID) · CUS_GD A 1%(20명) · B 9% · C 90%T_ITM_EVL 상품평가: 5,000행 · 48블록 · PK_T_ITM_EVL (ITM_ID, EVL_LST_NO) · EVL_DT는 2023-01-01 ~ 2024-12-31에 고르게 분포IX_ITM_EVL_CUS (CUS_ID, EVL_DT): 고객 상담 화면용으로 작년에 만들었다 · 통계 최신SELECT c.CUS_ID, c.CUS_NM,
COUNT(e.EVL_LST_NO) AS evl_cnt,
ROUND(AVG(e.EVL_PT), 1) AS avg_pt
FROM M_CUS c
LEFT JOIN T_ITM_EVL e
ON e.CUS_ID = c.CUS_ID
AND c.CUS_GD = 'A'
AND e.EVL_DT >= :v_from
AND e.EVL_DT < :v_to
GROUP BY c.CUS_ID, c.CUS_NM
ORDER BY evl_cnt DESC, c.CUS_ID
--------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 2000 |00:00:00.02 | 97 |
| 1 | SORT ORDER BY | | 1 | 2000 | 2000 |00:00:00.02 | 97 |
| 2 | HASH GROUP BY | | 1 | 2000 | 2000 |00:00:00.02 | 97 |
| 3 | NESTED LOOPS OUTER | | 1 | 2000 | 2012 |00:00:00.02 | 97 |
| 4 | TABLE ACCESS FULL | M_CUS | 1 | 2000 | 2000 |00:00:00.01 | 30 |
| 5 | VIEW | VW_LAT_C83A7ED5 | 2000 | 1 | 27 |00:00:00.01 | 67 |
|* 6 | FILTER | | 2000 | | 27 |00:00:00.01 | 67 |
| 7 | TABLE ACCESS BY INDEX ROWID BATCHED| T_ITM_EVL | 20 | 1 | 27 |00:00:00.01 | 67 |
|* 8 | INDEX RANGE SCAN | IX_ITM_EVL_CUS | 20 | 1 | 27 |00:00:00.01 | 40 |
--------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
6 - filter("C"."CUS_GD"='A')
8 - access("E"."CUS_ID"="C"."CUS_ID" AND "E"."EVL_DT">=:V_FROM AND "E"."EVL_DT"<:V_TO)
c.CUS_GD = 'A'가 실제로 무엇을 정했는지도 설명하시오.