테마
본사 메뉴팀의 「메뉴별 최근 판매」 화면은 메뉴를 고르면 그 메뉴가 담긴 최근 판매 50줄(판매번호, 수량, 단가)을 보여 준다. (ICE)아메리카노를 고르면 바로 뜨는데, 2022년 겨울에만 팔고 내린 시즌 메뉴를 고르면 2초 가까이 걸린다. 개발자는 "둘 다 인덱스를 탔고 실행계획 모양도 똑같다"라고 한다. 메뉴팀은 신메뉴를 등록한 첫날에도 이 화면을 자주 연다.
CF11 판매상품: 1,096,708행 · 8,204블록 · SLE_NO VARCHAR2(15) '20231231-0612'(판매일 + 그날 일련번호, 판매 순서대로 매겨진다) · 판매번호 순서대로 적재되어 있다CF11_PK (SLE_NO, ITM_NO): BLEVEL 2 · 리프 약 4,290블록 · 다른 인덱스 없음 · 통계 최신(ITM_NO 히스토그램 없음, 팔린 메뉴 88종)SELECT SLE_NO, SLE_QTY, SLE_UPRC
FROM CF11
WHERE ITM_NO = :itm
ORDER BY SLE_NO DESC
FETCH FIRST 50 ROWS ONLY
[(ICE)아메리카노]
----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |
----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 50 |00:00:00.01 | 5 | 0 |
|* 1 | VIEW | | 1 | 50 | 50 |00:00:00.01 | 5 | 0 |
|* 2 | WINDOW NOSORT STOPKEY | | 1 | 50 | 50 |00:00:00.01 | 5 | 0 |
| 3 | TABLE ACCESS BY INDEX ROWID| CF11 | 1 | 12463 | 50 |00:00:00.01 | 5 | 0 |
|* 4 | INDEX FULL SCAN DESCENDING| CF11_PK | 1 | 50 | 50 |00:00:00.01 | 3 | 0 |
----------------------------------------------------------------------------------------------------------
[시즌 메뉴 · 마지막 판매 2023-02-28]
----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |
----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 50 |00:00:01.62 | 1827 | 1795 |
|* 1 | VIEW | | 1 | 50 | 50 |00:00:01.62 | 1827 | 1795 |
|* 2 | WINDOW NOSORT STOPKEY | | 1 | 50 | 50 |00:00:01.62 | 1827 | 1795 |
| 3 | TABLE ACCESS BY INDEX ROWID| CF11 | 1 | 12463 | 50 |00:00:01.62 | 1827 | 1795 |
|* 4 | INDEX FULL SCAN DESCENDING| CF11_PK | 1 | 50 | 50 |00:00:01.60 | 1810 | 1790 |
----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("from$_subquery$_002"."rowlimit_$$_rownumber"<=50)
2 - filter(ROW_NUMBER() OVER ( ORDER BY INTERNAL_FUNCTION("SLE_NO") DESC )<=50)
4 - filter("ITM_NO"=:ITM)