테마
버거원 본사 정보계(DW) 적재가 장애로 비어서 주문 100만 건을 처음부터 다시 보내야 한다. 연동 배치는 마지막으로 보낸 주문번호(:v_last)를 기억해 두고, 그다음 1,000건씩 한 번에 받아 보낸다.
1,000번 돌아야 끝나는데 한 번 도는 데 걸리는 시간이 줄지 않는다. 오과장이 한 번 도는 SQL의 실행계획을 떠 왔다.
ORD: 1,000,000행 · 22,422블록(블록당 약 45행) · ORD_NO NUMBER 1 ~ 1,000,000(빈 번호 없음, 주문 일시 순으로 매겼다) · 테이블도 주문번호 순서로 쌓였다ORD_PK (ORD_NO): BLEVEL 2 · 리프 약 2,090블록 · ORD_X01 (ORD_DT, ORD_HMS) · 통계 최신SELECT ORD_NO, ORD_DT, ORD_HMS, SHOP_NO
FROM ORD
WHERE ORD_NO - :v_last BETWEEN 1 AND 1000
ORDER BY ORD_NO
----------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Used-Mem |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1000 |00:00:00.21 | 22239 | |
| 1 | SORT ORDER BY | | 1 | 2500 | 1000 |00:00:00.21 | 22239 |59392 (0)|
|* 2 | TABLE ACCESS FULL| ORD | 1 | 2500 | 1000 |00:00:00.20 | 22239 | |
----------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(("ORD_NO"-:V_LAST>=1 AND "ORD_NO"-:V_LAST<=1000))
ORD_PK가 있는데도 1,000건을 가져올 때마다 테이블 전체를 읽는 이유를 설명하시오. 재전송 전체(1,000번)의 일량도 어림하시오.