LEFT OUTER JOIN의 경우 ON 절에 OR 조건 0 3 3,827

by 힘내라김대리 [SQLServer] MSSQL LEFT OUTER JOIN OR 조건 [2019.05.28 10:49:34]


질문이 있습니다.

 

TABLE_A와 TABLE_B가 LEFT OUTER JOIN 을 통해서 데이터를 추출하려고 할때

 

SELECT A.*

FROM TABLE_A A 

LEFT OUTER JOIN TABLE_B B ON (A.ID = B.ID ) OR (A.NAME = B.NAME AND A.BIRTH_DATE = B.BIRTH_DATE)

이렇게 OR 조건을 포함하여 조인을 걸면 부하가 심한가요??

 

TALBE_A는 약 2만건 TABLE_B는 10만건이라 가정했을때, 실행하는게  너무 오래걸려서 질문을 드립니다.

 

나아가, 성능을 높이려면 어떻게 해결하는 것이 좋을까요???

by 우리집아찌 [2019.05.28 11:09:54]

테이블b에 인덱스은 어떻게 되나요??


by 르매 [2019.05.28 11:57:28]

A 테이블이 Driving, B 테이블이 Driven 테이블일테니.. B 테이블의 인덱스가 중요하겠네요.

이름을 보면 B.ID에는 인덱스가 이미 있을테고, B테이블의 NAME + BIRTH_DATE 에 대한 복합 인덱스도 있나요?
저 쿼리가 꼭 빠르게 실행되어야 하는 거라면.. 후자의 인덱스를 만들지 고민해 보시구요.

하지만 ON 절을 처리하기 위한 인덱스는 어차피 하나 밖에 못 쓰는데 하필 OR 조건이니.. 성능이 그다지 개선되지 않을 수도 있습니다.

옵티마이저가 ID와 (NAME + BIRTH_DATE) 에 걸린 2가지 인덱스를 교차로 잘 사용할 수 있다면 다행이지만, 그렇지 못하다면 차라리 OR 조건을 분리해서 2개의 SELECT 문으로 만들고 UNION 하는게 빠를지도 모르겠습니다.


by 마농 [2019.05.28 13:07:25]

쿼리가 모호합니다.
b 를 조인하지만 출력은 a 만 하네요.
이런식의 or 조건이면 a 가 중복되어 출력될 가능성이 있을 텐데요?

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