테마
정산 화면의 「기간 매출」 조회는 하루에 수천 번 호출된다. 개발팀은 이렇게 말한다. "ORD_DT에 인덱스를 만들었는데 안 빨라졌다."
화면은 'YYYYMMDD' 형식의 문자열 두 개(:v_from, :v_to)를 넘긴다. 아래는 2024년 6월 한 달을 넘겼을 때의 실행계획이다.
T_ORD_BIG: 1,000,000행 · 5,826블록 · ORD_DT는 DATE(전부 자정, 시분초 없음) · 6월 한 달 27,390행IX_ORD_BIG_DT (ORD_DT): 이미 있다 · 통계 최신SELECT COUNT(*), SUM(ORD_AMT)
FROM T_ORD_BIG
WHERE TO_CHAR(ORD_DT, 'YYYYMMDD') BETWEEN :v_from AND :v_to
Plan hash value: 914281838
------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.11 | 5826 |
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.11 | 5826 |
|* 2 | TABLE ACCESS FULL| T_ORD_BIG | 1 | 2500 | 27390 |00:00:00.11 | 5826 |
------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter((TO_CHAR(INTERNAL_FUNCTION("ORD_DT"),'YYYYMMDD')>=:V_FROM AND
TO_CHAR(INTERNAL_FUNCTION("ORD_DT"),'YYYYMMDD')<=:V_TO))
TABLE ACCESS FULL로 처리되는 이유를 실행계획의 어느 줄에서 알 수 있는지 설명하시오.