쿼리속도 저하의 문제를 수정하려면.. 0 2 429

by 띵똥 [2018.11.02 09:29:28]


  WHERE REGEXP_SUBSTR(A.REQ_KEY, '[^_]+', 1, 1) = B.INSPCT_INSTT_CD
     AND REGEXP_SUBSTR(A.REQ_KEY, '[^_]+', 1, 2) = B.RECPTN_DE
     AND REGEXP_SUBSTR(A.REQ_KEY, '[^_]+', 1, 3) = B.RECPTN_NO
     AND REGEXP_SUBSTR(A.REQ_KEY, '[^_]+', 1, 4) = B.INSPCT_ODR
     AND REGEXP_SUBSTR(A.REQ_KEY, '[^_]+', 1, 5) = B.DRFT_ODR

구문에 이런식으로 잘라서 조인을 시켜서 쿼리 속도가 느린것 같은데...저 키값을 컬럼을 새로 만들어서 넣어주는것 말고는 해결방안이 없을까요?!

by 아발란체 [2018.11.02 14:37:40]

데이타가 적을 때는 어떻게 써도 상관 없으나

중장기적으로 데이타가 많아진다면 조건식에 사용되는 항목은 인덱스를 타야 합니다.

그런데 인덱스 항목을 가공하면 인덱스로 잡혀 있어도 인덱스를 태울 수 없습니다.

가공값으로도 인덱스를 생성 할 수 있으나 위 구문에 접합해보이지는 않습니다.

 

인덱스는

정렬 저장된 값을 빨리 찾는 것이지

저장된 값 전체 10억건을 다 가공하고 거기서 만족된 값이 있는지 찾지는 않습니다.

 

즉 말씀주신 것처럼 저 조건이 빈번하게 사용되는 것이라면 컬럼을 새로 만들어 넣어주는 것이 좋아보입니다


by 마농 [2018.11.05 08:57:20]

양쪽 컬럼에 가공이 없다면? 양방향 조인이 가능합니다.
A -> B 또는 B -> A
어떤 방향의 조인이 더 유리할지? 더 유리한 쪽 조인을 선택합니다.
위의 경우엔 A 에 가공이 있어 A -> B 로 조인 방향이 고정됩니다.
A -> B 가 유리하다면 문제 없습니다.
B -> A 가 유리하다면 조건을 반대로 바꾸면 됩니다.
WHERE a.req_key = b.inspct_instt_cd  ||'_'|| b.recptn_de ||'_'|| b.recptn_no ||'_'|| b.inspct_odr ||'_'|| b.drft_odr
물론 a 와 b 양쪽 다 적절한 인덱스가 존재해야 합니다.

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