테마
한빛유통의 080 수신거부 ARS는 고객이 누른 휴대폰 번호로 마케팅 문자 수신 동의를 끈다. ARS 연동 모듈은 누른 숫자를 정수(long)로 바꿔 넘기고, 처리 SQL은 UPDATE 한 문장이다. 하루 3천 통쯤 들어오고 통마다 0.4초가 걸린다.
고객센터에는 "수신거부를 했는데 문자가 또 온다"는 민원이 매주 들어온다. 오과장이 어제 처리 결과를 뽑아 보니 갱신 0건으로 끝난 전화가 81통이었다.
T_CUS_CTC 고객 연락처(이 문제에서 쓰는 파생 테이블, 2023년 회원 통합 때 신 회원과 구 회원의 연락처를 합쳤다): 600,000행 · 3,760블록 · CTC_SEQ(PK) · CUS_ID · MBL_NO VARCHAR2(20) · SMS_AGR_YN · UPD_DTMBL_NO는 신 회원 570,000건이 '01012345678' 모양(11자리)이고, 구 회원 이관분 30,000건은 '+821012345678' 모양(국가 번호)이다. 하이픈이 든 값은 지금은 없다PK_T_CUS_CTC (CTC_SEQ) · IX_CUS_CTC_MBL (MBL_NO): BLEVEL 2 · 리프 약 1,880블록 · 통계 최신-- ARS 연동 : ps.setLong(1, 1012345678L) ← 고객이 누른 01012345678
UPDATE T_CUS_CTC
SET SMS_AGR_YN = 'N', UPD_DT = SYSDATE
WHERE MBL_NO = :1
[고객이 01012345678을 눌렀을 때]
--------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 1 | | 0 |00:00:00.38 | 3768 |
| 1 | UPDATE | T_CUS_CTC | 1 | | 0 |00:00:00.38 | 3768 |
|* 2 | TABLE ACCESS FULL| T_CUS_CTC | 1 | 6000 | 2 |00:00:00.38 | 3762 |
--------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(TO_NUMBER("MBL_NO")=:1)
[V$SQL_BIND_CAPTURE] :1 NUMBER 1012345678
[어제 처리 결과 · 3,012통]
갱신 1건 이상 2,931통
갱신 0건 81통 ← 79통은 연락처가 '+8210…' 모양인 구 회원, 2통은 등록되지 않은 번호
TO_NUMBER가 어디서 왔는지, 그리고 구 회원의 수신거부가 갱신 0건으로 끝난 이유를 설명하시오.TO_CHAR(:1)로 바꾸는 방법, ② TO_NUMBER(MBL_NO) 함수 기반 인덱스를 만드는 방법, ③ ARS가 누른 번호를 그대로 문자열로 넘기고 저장 형식을 하나로 통일하는 방법을 비교하시오.