업데이트시 함수기반인덱스를 통한 처리 도움<아래 작성한 내용 재작성> 0 1 1,699

by 김대영 [SQL Query] 함수기반인덱스 FBI 암호화 [2018.02.19 19:57:10]


SREG100_캡처.GIF (32,768Bytes)


업데이트시 함수기반인덱스를 통한 처리 도움

[EXAM200(지원자마스터)]에서 신상번호 를 업데으트 하고자 함.

<[SREG100(학생신상)]:암호화된테이블 IDNO(주민번호):암호화 칼럼> 

암호화된 칼럼으로 인덱스 처리시 처리가 안 되는것으로 알고 있는데,
복호화 함수를 사용해서 변환해서 인덱스 걸어야 하는건지 ?

오라클 힌트나 다른 방법을 써서 처리할수는 없는건지?

[SREG100(학생신상)]:암호화 테이블이어서 임의의 인덱스 걸기가 곤란한 상황입니다.

 
  답변 부탁드립니다.

 


UPDATE exam200 t1
   SET std_pers_no = (SELECT MAX(d1.std_pers_no) -- 신상번호
                        FROM inu_uni.sreg100_damo d1
                    -- WHERE inu_com.f_decrypt(d1.sec_idno) = t1.idno  -- f_decrypt(주민등록번호 해제용.)                           
                       WHERE d1.sec_idno = inu_com.f_encrypt(t1.idno)  -- f_encrypt(주민등록번호 암호화.)                           
                      )
 WHERE ...
;

최종 답변으로 이렇게 처리하라는 부분까지 왔는데, 여전히 속도가 느립니다.

함수기반인덱스를 사용하면 될것 같다고 도움말을 본것 같은데, 해당의 내용을 처음사용하는것이라
도저히 모르겠습니다.

암호화 펑션이 있는데 해당을 
UPDATE 시 어떻게 사용해야 하는지 도저히 감이 안 오네요.


 

by 마농 [2018.02.20 08:43:48]

인덱스가 언제 어디서 필요한지 파악하셔야 합니다.
1. t1 을 읽고
  - t1 을 검색하는 조건에 인덱스가 있어야 하구요.
2. 암호화 처리를 하고
  - 암호화 함수 처리하는 데 일정 시간이 소요됩니다.
  - 업데이트 대상 건수가 많을수록 느려집니다.
3. 업데이트할 값을 찾습니다.
  - 암호화 된 값을 이용해 d1 을 검색합니다.
  - 여기서 필요한 인덱스는 d1.sec_idno 입니다.
필요 인덱스가 있는지 확인하세요.
어느 단계에서 부하가 걸리는지 확인하세요.
4. 혹시 함수기반 인덱스는 없느지 확인해 보세요.
  - f_decrypt(d1.sec_idno) 로 된 FBI 존재하는지 확인해 보세요.
  - 인덱스 존재한다면? 다음 조건을 사용해도 됩니다.
  - WHERE inu_com.f_decrypt(d1.sec_idno) = t1.idno

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입