DB링크 조인 시 속도가 너무 느리게 나와요. 0 2 10,132

by 손님 [SQL Query] DRIVING_SITE DBLINK [2012.06.13 15:08:04]


SELECT
 /*+
INDEX(A MSTID_PK)
INDEX(B MSTID_PK)
INDEX(C MSTID_UK)
A.ID, B.ID, C.ID
*/ 
FROM A@DBLINK A , B@ DBLINK B , C @DBLINK C 
WHERE A.MSTID = B.MSTID
    AND  A.MSTID = C.MSTID
    AND  A.DATE = '20120601'

뭐 이런식의 단순한 쿼리문입니다.  (실제 테이블 8개정도 조인합니다.)
위 쿼리는 전부 DB링크 걸린 테이블입니다. 실행 시 1~2초가량이면 데이터가 나오는데요.

그런데 아래와 같이 저상태에서 제 테이블에 PROC과 조인하면 1분~5분까지 걸립니다. ㅠㅠ
    AND A.MSTID = D.MSTID  일 경우 조금 더 빠르고
    AND A.MSTID <> D.MSTID 일 경우 훨씬 많이 걸리네요.
SELECT
 /*+
INDEX(A MSTID_PK)
INDEX(B MSTID_PK)
INDEX(C MSTID_UK)
A.ID, B.ID, C.ID
*/ 
FROM A@DBLINK A , B@ DBLINK B , C @DBLINK C , PROC D
WHERE A.MSTID = B.MSTID
    AND  A.MSTID = C.MSTID
    AND  A.MSTID = D.MSTID
    AND  A.DATE = '20120601'

인덱스가 걸려있는것은 확인했는데 속도 차이가 너무나 많이 나네요.
제 테이블과 조인거는 순간 링크쪽 인덱스를 인식 못하는건가.. 
이런경우에는 어떻게 해줘야할까요?
by 부쉬맨 [2012.06.13 15:11:08]
drive_site 힌트를 줘보심이...
dblink 시 인덱스는 바라보는 방향쪽껄 보는게아니라 자신이 가지고 있는걸 보기도하고
좀애매합니다.

확실하게 바라보는쪽의 index를 사용하고싶으시다면 저 흰트를 주셔서 확인해보세요.

저조건은 부정형 으로 보는 자료자체가 많으면
강제로 full 로 태우시면 훨씬더빠를수있어요.

dblink는 아싸리 그냥 불확실하다면 데이터가 많지않다면 full 태우는게 좋아보임

by 손님 [2012.06.13 15:33:27]
감사합니다. 
DRIVING_SITE 힌트를 주니 속도가 굉장히 많이 개선되네요.
단순 무신 SELECT만 하던 녀석이라 참 어렵네요. 감사합니다. m00m
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입