테마
유통 매장 POS의 「영수증 찾기」는 위쪽 콤보에서 '판매번호'나 '판매일자'를 고르고 값을 친다. 화면은 고른 구분을 :v_tp('NO' 또는 'DT')로, 친 값을 :v_key로 넘긴다. 개발자는 SQL을 하나로 쓰려고 비교할 컬럼을 DECODE로 고르게 했다.
매장 다섯 곳에서 하루 수백 번 쓰는데, 찾을 때마다 계산대가 멈칫한다고 한다.
CF10 판매: 500,000행 · 4,583블록 · SLE_NO VARCHAR2(15) '20230601-0308'(판매일자 8자리 + - + 일련번호) · SLE_DT VARCHAR2(8) · SLE_HMS · SHP_NO · 판매번호 순(날짜 순)으로 쌓였다 · 2023-06-01 판매 706건CF10_PK (SLE_NO) · IX_CF10_SLE_DT (SLE_DT): 둘 다 BLEVEL 2 · 통계 최신SELECT SLE_NO, SLE_DT, SLE_HMS, SLE_DOW, SHP_NO
FROM CF10
WHERE DECODE(:v_tp, 'NO', SLE_NO, 'DT', SLE_DT) = :v_key
ORDER BY SLE_NO DESC
[판매번호 '20230601-0308'로 찾았을 때 · 판매일자 '20230601'로 찾아도 계획은 같다(706건, Buffers 4,587)]
---------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 | 00:00:00.06 | 4587 |
| 1 | SORT ORDER BY | | 1 | 5000 | 1 | 00:00:00.06 | 4587 |
|* 2 | TABLE ACCESS FULL | CF10 | 1 | 5000 | 1 | 00:00:00.06 | 4587 |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(DECODE(:V_TP,'NO',"SLE_NO",'DT',"SLE_DT")=:V_KEY)