조인해야 할 키값이 전화번호 인데
A 테이블은 컬럼명 phone 데이터가 01022225656 이고
B 테이블은 컬럼명 phone 데이터가 010-2222-5656 이라고 하면
이럴때 JOIN을 어떻게 해야 하나요?
한쪽을 가공(replace를 이용?)해서 조인을 하면 인덱스를 안타게 되서
데이터 불러오는 속도에 문제가 생기고
딱히 마땅한 방법이 안떠오르네요
쿼리로 해결할 수있는 좋은 방법이 없을까요?
Comment 3
-
맨즈밤
2014.04.30 09:57
제일 좋은 방법은 두 컬럼의 데이터 형식을 맞추는거겠고, 그 다음으로는 초짜해커님 말씀처럼 컬럼하나 더 생성시키는 거로 보입니다.
다만 이럴경우 응용프로그램쪽에서 수정이 발생할수도 있을거같네요.
단지 쿼리로만으로 성능이슈를 극복하려면 실행계획을 분석해서 그나마 최선을 찾아야 할걸로 보입니다. 머지조인,해시조인,루프조인...루프조인의 경우 어느테이블이 먼저 드라이빙될지 ,where조건은 어떤지, 데이터 분포도는 어떤지에 따라 이 실행계획이 나을수도 있고, 저 실행계획이 나을수도 있고 하니까요.
-
항해자™
2014.04.30 10:36
그냥 조인만 하나요?? b 테이블에 필터되는 조건이 있으면 상황이 좀 달라집니다,,,
쿼리 내용과 필터 등을 좀더 자세히 알려주세요,,
B테이블의 phone컬럼의 "-" 을 없엔 phone2 컬럼을 포함한 View를 만들고
이 phone2 컬럼에 인덱스를 걸어서 join을 하는 방법이 있겠구요.
View가 싫으시면 계산된 열을 PERSISTED옵션으로 만들고 그 컬럼에 인덱스를 만드는 방법도 있겠네요.