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만건이라 가정했을때, 실행하는게 너무 오래걸려서 질문을 드립니다.
나아가, 성능을 높이려면 어떻게 해결하는 것이 좋을까요???
A 테이블이 Driving, B 테이블이 Driven 테이블일테니.. B 테이블의 인덱스가 중요하겠네요.
이름을 보면 B.ID에는 인덱스가 이미 있을테고, B테이블의 NAME + BIRTH_DATE 에 대한 복합 인덱스도 있나요?
저 쿼리가 꼭 빠르게 실행되어야 하는 거라면.. 후자의 인덱스를 만들지 고민해 보시구요.
하지만 ON 절을 처리하기 위한 인덱스는 어차피 하나 밖에 못 쓰는데 하필 OR 조건이니.. 성능이 그다지 개선되지 않을 수도 있습니다.
옵티마이저가 ID와 (NAME + BIRTH_DATE) 에 걸린 2가지 인덱스를 교차로 잘 사용할 수 있다면 다행이지만, 그렇지 못하다면 차라리 OR 조건을 분리해서 2개의 SELECT 문으로 만들고 UNION 하는게 빠를지도 모르겠습니다.