테마
영업기획팀의 「금액대별 등급 매출」은 금액 구간을 고르면 그 구간 주문을 고객 등급별로 묶는다. 구간은 10만 원 단위이고 화면이 리터럴로 넣는다. 지난주부터 어느 구간을 골라도 느리다는 말이 나왔다.
조민우가 보니 지난 일요일에 통계가 다시 모였고, 그 전 주에 감사팀 요청으로 2019년 부하 시험 주문 한 건을 백업에서 되살려 T_ORD_BIG에 넣었다. 주문 금액이 9,999,999,999원이다. 감사가 끝날 때까지 지우지 말라는 요청이 붙어 있다.
T_ORD_BIG: 1,000,001행 · 5,826블록 · ORD_AMT 10,000 ~ 500,000원(100원 단위, 고르게) + 시험 주문 1건 9,999,999,999원 · 이 SQL에 쓰이는 인덱스는 없다ORD_AMT NUM_DISTINCT 4,902 · 최솟값 10,000 · 최댓값 9,999,999,999 · 히스토그램 없음 · 선호도 FOR ALL COLUMNS SIZE 1 FOR COLUMNS SIZE 254 ORD_ST(정책서 1호)M_CUS: 2,000행 · 30블록 · PK_M_CUS (CUS_ID) · CUS_GD A · B · CSELECT c.CUS_GD, COUNT(*) AS cnt, ROUND(AVG(o.ORD_AMT)) AS avg_amt
FROM T_ORD_BIG o, M_CUS c
WHERE o.ORD_AMT >= 100000
AND o.ORD_AMT < 200000
AND c.CUS_ID = o.CUS_ID
GROUP BY c.CUS_GD
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 3 |00:00:00.18 | 214K |
| 1 | HASH GROUP BY | | 1 | 3 | 3 |00:00:00.18 | 214K |
| 2 | NESTED LOOPS | | 1 | 214 | 204K|00:00:00.17 | 214K |
| 3 | NESTED LOOPS | | 1 | 214 | 204K|00:00:00.09 | 10112 |
|* 4 | TABLE ACCESS FULL | T_ORD_BIG | 1 | 214 | 204K|00:00:00.05 | 5826 |
|* 5 | INDEX UNIQUE SCAN | PK_M_CUS | 204K| 1 | 204K|00:00:00.03 | 4286 |
| 6 | TABLE ACCESS BY INDEX ROWID| M_CUS | 204K| 1 | 204K|00:00:00.06 | 204K |
---------------------------------------------------------------------------------------------
4 - filter(("O"."ORD_AMT">=100000 AND "O"."ORD_AMT"<200000))
5 - access("C"."CUS_ID"="O"."CUS_ID")
[USER_TAB_COL_STATISTICS · ORD_AMT] NUM_DISTINCT 4,902 · LOW 10000 · HIGH 9999999999 · HISTOGRAM NONE
E-Rows 214를 손으로 계산하고, 시험 주문 한 건이 어느 구간에서나 추정을 망가뜨린 이유를 설명하시오.