테마
버거원 상품기획팀이 「메뉴 판매 내역」 화면을 새로 연다. 메뉴 하나와 기간(보통 한 달)을 고르면 그 메뉴가 팔린 주문을 시각순으로 보여 주고, 프로모션 효과를 볼 때는 파일로 내려받는다. 기획자 여섯 명이 하루 수백 번 열 것이라고 한다.
조민우가 (ITEM_ID, ORD_DT) 인덱스 승인서(A안)를 올렸는데 박팀장이 반려했다. "예상 크기, 높이, 화면 예상 블록, 적재 비용 칸이 비어 있다. 만들기 전에 어림해서 채워 와라. 화면이 쓰는 컬럼을 다 담는 B안 (ITEM_ID, ORD_DT, ORD_HMS, ORD_NO, ORD_ITEM_QTY)도 같은 칸으로 비교해서."
ORD_ITEM 주문상품: 2,472,717행 · 55,265블록(블록당 약 45행) · 주문 날짜순으로 쌓였다 · ITEM_ID NUMBER 1 ~ 92에 고르게 분포(상품당 약 26,900행, 하루 약 37행) · ORD_DT VARCHAR2(8) · ORD_HMS VARCHAR2(6) · ORD_ITEM_QTY NUMBER(1 ~ 9)ORD_ITEM_PK (ORD_NO, ITEM_ID) · ORD_ITEM_X01 (ORD_DT, ORD_HMS): BLEVEL 2 · 리프 약 9,300블록 · CLUSTERING_FACTOR 약 55,200 · 통계 최신ITEM_ID와 ORD_ITEM_QTY는 값이 2바이트, ORD_NO는 4바이트, ORD_DT는 8바이트, ORD_HMS는 6바이트다 · 브랜치 블록 하나는 아래 블록을 수백 개 가리킨다-- 「메뉴 판매 내역」 (하루 수백 번)
SELECT ORD_DT, ORD_HMS, ORD_NO, ORD_ITEM_QTY
FROM ORD_ITEM
WHERE ITEM_ID = :v_item
AND ORD_DT BETWEEN :v_from AND :v_to
ORDER BY ORD_DT, ORD_HMS;
-- 조민우 승인서 A안 (예상 크기 · 높이 · 화면 예상 블록 · 적재 비용 : 빈칸)
CREATE INDEX ORD_ITEM_X03 ON ORD_ITEM (ITEM_ID, ORD_DT);
[지금 · 자이언트더블버거 2013년 11월]
------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1121 |00:00:00.07 | 2687 |
|* 1 | FILTER | | 1 | | 1121 |00:00:00.07 | 2687 |
|* 2 | TABLE ACCESS BY INDEX ROWID| ORD_ITEM | 1 | 110 | 1121 |00:00:00.07 | 2687 |
|* 3 | INDEX RANGE SCAN | ORD_ITEM_X01 | 1 | 10107 | 102K|00:00:00.01 | 390 |
------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(:V_FROM<=:V_TO)
2 - filter("ITEM_ID"=:V_ITEM)
3 - access("ORD_DT">=:V_FROM AND "ORD_DT"<=:V_TO)
(X01 순서가 ORDER BY와 같아 정렬은 없다)
[승인서 양식] 예상 크기(리프 블록 · MB) · 높이(BLEVEL) · 화면 예상 블록 · 적재 비용 · 전제하는 컬럼