2013-06-11 2 views
0

에 가입 (를) 대체 할 수있는 다른 내가 여기있다 크로스 TSQL

Table1.LastName 사이 Table2.LastName 조건 Fuzzy_Qgram (대략 일치하는 최적화)을 만족하는 모든 행을 찾을 필요가 어디 두 테이블 Table1Table2이 있는가 내 쿼리 :이 쿼리에서

Select * from Table1 
Cross Join 
Table2 
Where Fuzzy_Qgram(Table1.LastName,Table2.LastName)> =1.5 

Table1의 각 행은 Table2 A의 각 행에 다중화 된입니다 Fuzzy_Qgram(Table1.LastName,Table2.LastName)> =1.5을 만족하는 행이 반환됩니다.

내가 Table2

이상 Table1에서 30 행3000 행 더 빠른 최적화를위한 이러한 쿼리에 대한 Cross Join (를) 대체 할 수있는 다른이가 가지고있는 쿼리의 실행이 매우 느립니다?

+0

fn이 스칼라이므로 문제가 발생할 것으로 예상됩니다. '퍼지'논리를 예를 들어 십자가가 적용됩니까? – OzrenTkalcecKrznaric

+0

아니,'Table2'는 *보기 * 테이블이 아닙니다. 죄송합니다. 타이핑 실수입니다. – user42995

+0

@Ozren Tkalčec Krznarić : 예, 조건을 적용 할 스칼라 값을 반환합니다. – user42995

답변

0

함수의 매개 변수 순서가 차이가 있습니까? 내 말은, 다음 쿼리를 실행할 때 동일한 결과를 얻을 수 있다는 뜻입니까? 그렇다면 당신이 당신의 쿼리를 변경할 수 있도록

Select Fuzzy_Qgram('Washington','Obama') 
Select Fuzzy_Qgram('Obama','Washington') 

은, 다음, 그것을 두 가지를 테스트 할 이유가 안 : 물론

Select * 
from Table1 
     Inner join Table2 
     On Table.LastName <= Table2.LastName 
Where Fuzzy_Qgram(Table1.LastName,Table2.LastName)> =1.5 

, 나는 Fuzzy_Qgram가 무엇 아무 생각이 없다 그래서 당신은 이것을 철저히 시험하고 싶을 것이다. 이것이 맞다면 실행 시간이 약 1/2 단축 될 것입니다.

0

짧은 이야기를 짧게 자릅니다.

SELECT * 
FROM 
Table1 t1 
JOIN Table2 t2 
    ON 1=1 
CROSS APPLY (
    SELECT 
    fuzzy_qgram = t1.someColumnOf_t1 + t2.someColumnOf_t2 
) ext 
WHERE ext.fuzzy_qgram >= 1.5 

은 물론, 당신은 당신의 fuzzy_qgram 로직 t1.someColumnOf_t1 + t2.someColumnOf_t2를 교체해야합니다. 이것을 사용하면 상당한 속도 향상을 볼 수 있습니다.