테마
버거 본사는 작년 말 2012년 주문을 보관 테이블 ORD_ARC로 옮기고, 화면과 배치가 두 해를 함께 볼 수 있게 뷰 V_ORD_ALL을 만들었다. 그 뒤로 「매장 월 정산 집계」(2년 치 매장 × 월 주문 수, 하루 40번)가 0.7초에서 4.1초로 느려졌고, 돌 때마다 TEMP를 40MB 넘게 쓴다.
뷰를 만든 개발자는 "두 테이블에 같은 주문이 들어 있을까 봐 UNION으로 묶었다"라고 했다.
ORD 주문 (이 문제의 설정): 2013년 주문만 남았다 · 500,218행 · 11,216블록 · ORD_PK (ORD_NO)ORD_ARC 보관 주문 (파생 테이블): ORD와 같은 구조 · 2012년 주문 499,782행 · 11,206블록 · ORD_ARC_PK (ORD_NO) · 옮긴 주문은 ORD에서 지웠다ORD(1,000,000행 · 22,422블록)와 같다 · 주문번호는 한 번 쓰면 다시 쓰지 않는다pga_aggregate_target 512M · AUTO · 통계 최신CREATE OR REPLACE VIEW V_ORD_ALL AS
SELECT ORD_NO, ORD_DT, ORD_HMS, SHOP_NO FROM ORD
UNION
SELECT ORD_NO, ORD_DT, ORD_HMS, SHOP_NO FROM ORD_ARC;
-- 매장 월 정산 집계 (하루 40번)
SELECT SHOP_NO, SUBSTR(ORD_DT, 1, 6) AS ORD_YM, COUNT(*) AS ORD_CNT
FROM V_ORD_ALL
GROUP BY SHOP_NO, SUBSTR(ORD_DT, 1, 6);
[매장 월 정산 집계]
----------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | Writes | Used-Mem | Used-Tmp |
----------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 4800 | 00:00:04.12 | 22422 | 5376 | 5376 | | |
| 1 | HASH GROUP BY | | 1 | 4800 | 4800 | 00:00:04.12 | 22422 | 5376 | 5376 | 1934K (0) | |
| 2 | VIEW | V_ORD_ALL | 1 | 1000K | 1000K | 00:00:03.87 | 22422 | 5376 | 5376 | | |
| 3 | SORT UNIQUE | | 1 | 1000K | 1000K | 00:00:03.71 | 22422 | 5376 | 5376 | 23M (1) | 42M |
| 4 | UNION-ALL | | 1 | | 1000K | 00:00:00.38 | 22422 | 0 | 0 | | |
| 5 | TABLE ACCESS FULL | ORD | 1 | 500K | 500K | 00:00:00.17 | 11216 | 0 | 0 | | |
| 6 | TABLE ACCESS FULL | ORD_ARC | 1 | 500K | 500K | 00:00:00.16 | 11206 | 0 | 0 | | |
----------------------------------------------------------------------------------------------------------------------------------------