테마
쇼핑몰 상품 상세 화면 아래의 「상품평」 탭은 그 상품의 평가 50건을 최신 순으로 모두 보여 준다. 상세 화면은 하루 약 12만 번 열린다.
상품평 테이블은 48블록짜리 작은 테이블인데, AWR의 'SQL ordered by Gets'에서 이 SQL이 5위에 올라 있다. 조민우가 PK를 타라고 INDEX_DESC 힌트를 넣어 재 보니 오히려 한 블록을 더 읽었다. 아래는 상품 ITM00007이다.
T_ITM_EVL 상품평가: 5,000행 · 48블록(블록당 약 104행) · 컬럼 ITM_ID · EVL_LST_NO · CUS_ID · EVL_DSC(짧은 한 줄 평) · EVL_DT · EVL_PTEVL_LST_NO) 순으로 쌓였고, 평가 번호가 상품 100종을 하나씩 돌아가며 매겨졌다 · 그래서 상품 하나의 50건은 100행 간격으로 떨어져 48블록 가운데 47블록에 하나씩 있다PK_T_ITM_EVL (ITM_ID, EVL_LST_NO): BLEVEL 1 · 리프 15블록 · CLUSTERING_FACTOR 4,700 · 다른 인덱스는 없다 · 통계 최신SELECT EVL_LST_NO, CUS_ID, EVL_DT, EVL_PT, EVL_DSC
FROM T_ITM_EVL
WHERE ITM_ID = :v_itm
ORDER BY EVL_LST_NO DESC
[옵티마이저가 고른 계획]
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 50 |00:00:00.01 | 48 |
| 1 | SORT ORDER BY | | 1 | 50 | 50 |00:00:00.01 | 48 |
|* 2 | TABLE ACCESS FULL | T_ITM_EVL | 1 | 50 | 50 |00:00:00.01 | 48 |
-------------------------------------------------------------------------------------------------------
2 - filter("ITM_ID"=:V_ITM)
[조민우가 /*+ INDEX_DESC(T_ITM_EVL PK_T_ITM_EVL) */ 로 재 본 계획]
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 50 |00:00:00.01 | 49 |
| 1 | TABLE ACCESS BY INDEX ROWID | T_ITM_EVL | 1 | 50 | 50 |00:00:00.01 | 49 |
|* 2 | INDEX RANGE SCAN DESCENDING | PK_T_ITM_EVL | 1 | 50 | 50 |00:00:00.01 | 2 |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ITM_ID"=:V_ITM)