테마
본사 상품팀은 단종 후보를 고를 때 「상품별 마지막 판매」(상품마다 마지막으로 팔린 판매번호, 수량, 단가)를 본다. 오전 회의 전에 상품팀 8명이 몰아서 여는데 한 번에 2.3초가 걸리고, DBA에게는 TEMP 사용 경보가 온다. SQL 위에는 2021년에 남긴 메모가 있다. "GROUP BY로 MAX를 구해 다시 조인하면 판매상품을 두 번 읽는다. 분석 함수로 한 번만 읽게 고쳤다."
CF11 판매상품: 1,096,708행 · 8,204블록 · SLE_NO VARCHAR2(15) '20231231-0612'(판매일 + 그날 일련번호, 판매 순서대로 매겨진다) · ITM_NO · SLE_QTY · SLE_UPRC · 판매번호 순서대로 적재CF11_PK (SLE_NO, ITM_NO): BLEVEL 2 · 리프 약 4,290블록 · 다른 인덱스는 없다 · 통계 최신SLE_NO는 겹치지 않는다SELECT ITM_NO, SLE_NO, SLE_QTY, SLE_UPRC
FROM (SELECT d.ITM_NO, d.SLE_NO, d.SLE_QTY, d.SLE_UPRC,
MAX(d.SLE_NO) OVER (PARTITION BY d.ITM_NO) AS LAST_NO
FROM CF11 d)
WHERE SLE_NO = LAST_NO
ORDER BY ITM_NO
----------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | Used-Mem | Used-Tmp|
----------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 88 |00:00:02.31 | 8204 | | | |
|* 1 | VIEW | | 1 | 1096K| 88 |00:00:02.31 | 8204 | | | |
| 2 | WINDOW SORT | | 1 | 1096K| 1096K|00:00:02.12 | 8204 | 47M| 20M (1)| 38M|
| 3 | TABLE ACCESS FULL| CF11 | 1 | 1096K| 1096K|00:00:00.13 | 8204 | | | |
----------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("SLE_NO"="LAST_NO")
MAX() OVER의 성질로 설명하시오.ROW_NUMBER로 고친 안과, GROUP BY로 상품별 마지막 판매번호를 구해 다시 찾는 안의 일량을 어림해 비교하고, 하나를 골라 SQL로 쓰시오.