테마
정산 대시보드의 「취소 추이」는 기간을 고르면 일자별 취소 건수를 그래프로 그린다. 보통 한 분기를 고르며, 하루에 수천 번 조회된다. 지난달 조민우가 인덱스를 하나 만들면서 이런 메모를 남겼다. "종류가 많은 컬럼을 앞에 둔다. ORD_DT 1,095종, ORD_ST 3종." 인덱스는 타는데 생각만큼 빨라지지 않았다고 한다. 아래는 2024년 2분기(4 ~ 6월)를 골랐을 때다.
T_ORD_BIG: 1,000,000행 · 5,826블록 · ORD_DT 1,095일(하루 913건, 전부 자정) · ORD_ST COMPLETE 90% · PENDING 8% · CANCEL 2%IX_ORD_BIG_DT_ST (ORD_DT, ORD_ST): BLEVEL 2 · 리프 약 3,890블록 · 통계 최신 · ORD_ST에 히스토그램SELECT ORD_DT, COUNT(*) AS cancel_cnt
FROM T_ORD_BIG
WHERE ORD_ST = 'CANCEL'
AND ORD_DT >= TO_DATE(:v_from, 'YYYYMMDD')
AND ORD_DT < TO_DATE(:v_to, 'YYYYMMDD') + 1
GROUP BY ORD_DT
ORDER BY ORD_DT
---------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
---------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 18 |00:00:00.02 | 326 |
| 1 | SORT GROUP BY NOSORT | | 1 | 91 | 18 |00:00:00.02 | 326 |
|* 2 | FILTER | | 1 | | 1644 |00:00:00.02 | 326 |
|* 3 | INDEX RANGE SCAN | IX_ORD_BIG_DT_ST | 1 | 1662 | 1644 |00:00:00.02 | 326 |
---------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(TO_DATE(:V_TO,'YYYYMMDD')+1>TO_DATE(:V_FROM,'YYYYMMDD'))
3 - access("ORD_DT">=TO_DATE(:V_FROM,'YYYYMMDD') AND "ORD_ST"='CANCEL' AND
"ORD_DT"<TO_DATE(:V_TO,'YYYYMMDD')+1)
filter("ORD_ST"='CANCEL')