테마
버거원 POS의 「영수증 재출력」은 주문번호로 주문상품을 읽는다. 2년 전 개발자는 이 화면을 위해 ORD_ITEM_X03 (ORD_NO)를 만들며 이렇게 적었다. "PK가 (ORD_NO, ITEM_ID) 두 컬럼이라 주문번호 하나만으로는 PK를 못 탈 것 같다."
이번 점검에서 주문상품 적재가 무겁다는 말이 나왔고, 오과장은 X03을 지워도 되는지 물었다.
ORD_ITEM 주문상품: 2,472,717행 · 55,265블록 · (ORD_NO, ITEM_ID) 순으로 쌓였다 · 주문 하나에 평균 2.5줄 · POS가 하루 약 3,400줄을 INSERT한다ORD_ITEM_PK (ORD_NO, ITEM_ID): BLEVEL 2 · 리프 약 6,200블록 · CF 약 55,100ORD_ITEM_X01 (ORD_DT, ORD_HMS): 리프 약 9,320블록 · ORD_ITEM_X02 (ITEM_ID, ORD_DT, ORD_ITEM_QTY): 「상품 월간 추이」용ORD_ITEM_X03 (ORD_NO): BLEVEL 2 · 리프 약 5,400블록 · CF 약 55,100 · 통계 최신-- 「영수증 재출력」 (매장 POS · 하루 약 6천 번)
SELECT ITEM_ID, ORD_ITEM_QTY
FROM ORD_ITEM
WHERE ORD_NO = :v_ord_no
ORDER BY ITEM_ID;
-- 2년 전 만든 인덱스
CREATE INDEX ORD_ITEM_X03 ON ORD_ITEM (ORD_NO);
---------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
---------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 3 |00:00:00.01 | 4 |
| 1 | SORT ORDER BY | | 1 | 3 | 3 |00:00:00.01 | 4 |
| 2 | TABLE ACCESS BY INDEX ROWID BATCHED| ORD_ITEM | 1 | 3 | 3 |00:00:00.01 | 4 |
|* 3 | INDEX RANGE SCAN | ORD_ITEM_X03 | 1 | 3 | 3 |00:00:00.01 | 3 |
---------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("ORD_NO"=:V_ORD_NO)