테마
상품 상세 화면 아래의 상품평은 최신순으로 10건을 보여 주고, 「더 보기」를 누르면 다음 10건을 이어 붙인다. 화면은 마지막으로 보인 평가의 평가일(EVL_DT)을 들고 있다가 다음 SQL에 넘긴다.
고객센터에 이런 문의가 들어왔다. "더 보기를 눌렀더니 방금 읽은 평가가 또 나온다. 어떤 상품은 아무리 눌러도 같은 평가만 나온다."
T_ITM_EVL 상품평가: 5,000행 · 48블록 · 상품당 50건 · PK_T_ITM_EVL (ITM_ID, EVL_LST_NO). 인덱스는 PK뿐이다.EVL_LST_NO는 상품마다 평가가 등록된 순서대로 1부터 매기는 번호다.EVL_DT는 DATE지만 앱이 TRUNC해서 넣어 날짜만 있다. 그래서 한 상품에 같은 날짜 평가가 여럿 있다(출시일에는 하루 12건인 상품도 있다).SELECT EVL_LST_NO, CUS_ID, EVL_DT, EVL_PT
FROM T_ITM_EVL
WHERE ITM_ID = :itm
AND EVL_DT <= :last_dt -- 첫 화면은 :last_dt = 오늘
ORDER BY EVL_DT DESC
FETCH FIRST 10 ROWS ONLY
[「더 보기」 한 번 · 상품 하나 · :last_dt = 2024-06-14]
--------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Used-Mem |
--------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 10 |00:00:00.01 | 4 | |
|* 1 | VIEW | | 1 | 10 | 10 |00:00:00.01 | 4 | |
|* 2 | WINDOW SORT PUSHED RANK | | 1 | 3 | 10 |00:00:00.01 | 4 | 2048 (0) |
|* 3 | TABLE ACCESS BY INDEX ROWID BATCHED| T_ITM_EVL | 1 | 3 | 43 |00:00:00.01 | 4 | |
|* 4 | INDEX RANGE SCAN | PK_T_ITM_EVL | 1 | 50 | 50 |00:00:00.01 | 2 | |
--------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("from$_subquery$_002"."rowlimit_$$_rownumber"<=10)
2 - filter(ROW_NUMBER() OVER ( ORDER BY INTERNAL_FUNCTION("EVL_DT") DESC )<=10)
3 - filter("EVL_DT"<=:LAST_DT)
4 - access("ITM_ID"=:ITM)
[화면 · 평가 번호 (평가일)]
첫 화면 50 49 48 47 46 45 44 · 43 41 42 (43 · 42 · 41 은 2024-06-14, 마지막 줄은 42)
더 보기 41 43 42 · 40 39 38 37 36 35 34 ← 6월 14일 평가 세 건이 다시 나온다
EVL_DT < :last_dt로만 바꾸면 어떻게 되는지도 설명하시오.