<★(재질문)아래 여러분이 남겨주신 방법으로 다 해 보아도  여전히 속도가 느리네요,>대량 데이터 업데이트시 문의 ? (암호화 테이블과 join 후 ) 0 9 4,321

by 김대영 업데이트 힌트 암호화테이블 FUNCTION-BASED FBI 함수기반인덱스 [2018.02.13 11:37:32]


SREG100_캡처.GIF (32,768Bytes)


  -- 신상번호 업데이트
  UPDATE EXAM200 T1  - [지원자마스터]
     SET STD_PERS_NO =  (SELECT MAX(D1.STD_PERS_NO) -- 신상번호
                           FROM INU_UNI.SREG100 D1  -- [학생신상]
                          WHERE D1.IDNO = T1.IDNO   -- 주민번호
                         GROUP BY T1.IDNO
                         )
   WHERE T1.COLL_YY        = '2018'   -- 모집년도
    ; 


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

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

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

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

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

 
  답변 부탁드립니다.

 

★아래 여러분이 남겨주신 방법으로 다 해 보아도  여전히 속도가 느리네요,

★★[SREG100_DAMO(학생신상)] 테이블의 인덱스 정보 입니다 .

 FUNCTION-BASED  ..... 걸어서 어이 하면 될것 같은데... 해당의 내용은 처음사용하는것이라 도저희 모르겠습니다. 어떻게 하면 될까요?  도움 부탁드립니다.

 

 

by 우리집아찌 [2018.02.13 12:44:17]

FBI 찾아보세요.


by 우리집아찌 [2018.02.13 13:22:56]

아 암호화 펑션이 없으면 안되면 FBI 못쓰겠네요.


by 김대영 [2018.02.13 19:32:52]


  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 T1.COLL_YY        = '2018'      -- #모집년도
       --입시종별구분[UA001]
       AND T1.EXAM_CLSF_GBN IN ('01','03','04','05' )
       AND SUBSTR(T1.PASS_GBN,1,1) IN ( '0', '1', '2', '3' )  -- 본합격 + 추가합격
       AND T1.STUNO IS NOT NULL       -- 학번부여된 학생
       AND EXISTS (SELECT 1
                     FROM EXAM650 S1
                    WHERE S1.COLL_YY       = T1.COLL_YY
                      AND S1.EXAM_CLSF_GBN = T1.EXAM_CLSF_GBN
                      AND S1.EXAM_NO       = T1.EXAM_NO
                      AND S1.TUIT_STD_GBN  = '2'     -- [UA075]등록금구분<1:예치금,2:등록금>
                      AND S1.REG_GBN       = '1'      -- [UA076]등록구분<0:미등록,1:등록,2:환불>
                     );
 


 INU_COM 에 있는  F_DECRYPT(주민등록번호 해제용) 을 FBI()
 걸어서 처리하려면 어떻게 하면 될까요?

  FBI는 처음 접하는 거라 도저히 모르겠습니다

  답변 부탁드립니다.


by 마농 [2018.02.13 13:06:23]

어떤 방식의 암호화를 적용햇는지 모르지만...
암호화와 인덱스는 별개입니다.
암호화 했다고 인덱스 못타는거 없습니다.
암호화 컬럼여부와 상관 없이 컬럼에 인덱스가 있다면? 문제 없습니다.
인덱스가 없다면? 암호화와 상관 없이 성능에 문제가 있습니다.


by 김대영 [2018.02.13 15:09:56]

디아모의 암호화 처리를 사용합니다.

암호화된 칼럼인 경우

암호화된 컬럼은 인덱스를 준다고 하여 해당하는 쿼리속도가 개선되지 않고

복호화된 컬럼으로 컬럼으로 인덱스를 찾은 후에 조회해야 한다고 알고있는데 ? 맞는건지요?


by 우리집아찌 [2018.02.13 15:42:17]

디아모가 아마 VIEW형태로 테이블을 보지않나요?

 


by 마농 [2018.02.13 16:06:23]

제가 사용했었던 디아모의 경우 구조가 다음과 같았습니다.
 - 암호화 테이블 : 테이블명_DAMO
 - 복호화 뷰 : 테이블명
"테이블명" 을 사용해 Select 하고 Update 한다면?
이는 복호화된 뷰를 이용하고 계신 것입니다.
Update 는 Insted of trigger 를 이용할 것입니다.
동일한 구조로 사용하고 계시다면?
"테이블명" 뷰를 이용해 Update 하지 마시고 직접 테이블을 이용해 업데이트 해보세요.
 

UPDATE exam200_damo t1  -- [지원자마스터]
   SET std_pers_no = (SELECT MAX(d1.std_pers_no)        -- 신상번호
                        FROM inu_uni.sreg100_damo d1    -- [학생신상]
                       WHERE d1.idno_sec = t1.idno_sec  -- 주민번호
                      -- GROUP BY t1.idno_sec           -- 불필요함
                      )
 WHERE t1.coll_yy = '2018'  -- 모집년도
; 

 


by 김대영 [2018.02.13 19:35:47]


  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 T1.COLL_YY        = '2018'      -- #모집년도
       --입시종별구분[UA001]
       AND T1.EXAM_CLSF_GBN IN ('01','03','04','05' )
       AND SUBSTR(T1.PASS_GBN,1,1) IN ( '0', '1', '2', '3' )  -- 본합격 + 추가합격
       AND T1.STUNO IS NOT NULL       -- 학번부여된 학생
       AND EXISTS (SELECT 1
                     FROM EXAM650 S1
                    WHERE S1.COLL_YY       = T1.COLL_YY
                      AND S1.EXAM_CLSF_GBN = T1.EXAM_CLSF_GBN
                      AND S1.EXAM_NO       = T1.EXAM_NO
                      AND S1.TUIT_STD_GBN  = '2'     -- [UA075]등록금구분<1:예치금,2:등록금>
                      AND S1.REG_GBN       = '1'      -- [UA076]등록구분<0:미등록,1:등록,2:환불>
                     );
 


 와 같이 걸어서 했는데 계속 30분째 돌고 있네요.
  INU_UNI.SREG100_DAMO 테이블의 SEC_IDNO 칼럼
  EXAM200              테이블의 IDNO 칼럼      에 인덱스 거는 것 말고는 방법이 없을까요 ?


by 마농 [2018.02.13 23:32:49]

복호화해서 비교하지 마시고 --> 반대로 암호화해서 비교하세요.
인덱스가 없다면 느린것은 당연합니다. --> 없다면 만들어야 합니다.
암호화 제품을 사용했다면? --> 인덱스가 있을 것 같습니다.
필요 인덱스 --> sreg100_damo(sec_idno)

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 ...
;

 

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