2012-04-16 2 views
0

이론적으로 왜 내부 조인 작업이 현저히 빠르며 두 쿼리가 동일한 결과 집합을 반환한다는 사실을 고려할 때 외부 조인을 남겨 두었을 것입니다. 설명하는 데 오랜 시간이 걸리는 쿼리가 있지만 이것은 단일 조인 변경 (왼쪽 외부 조인 - 6 초, 내부 조인 - 0 초 (나머지 쿼리는 동일))을 보았습니다. 결과 집합 : 같은SQL Server 속도 : 왼쪽 외부 조인 대 내부 조인

+9

실행 계획을 비교 했습니까? 모호한 질문을하는 경우 매우 구체적인 결과가 기대되지 않기를 바랍니다. –

+0

예상되는 결과를 얻으려면 먼저 통계 (및 색인)가 최신 상태인지 확인해야합니다. –

+0

@Aaron Bertrand 예, 죄송하지만 자세한 내용을 설명 할 수 없습니다. 실행 계획은 다르게 보이지만 잘 읽지는 않습니다. 어쨌든 나는 아마 이것에 대한 일반적인 이유가있을 것이라고 생각했다. ... – ren

답변

1

가 실제로 외부 조인 왼쪽 및 내부 데이터에 의존하는 것보다 결과가있을 것이다 가입하고 다시 데이터에 따라 외부 왼쪽 같은 results..most을 반환하지 않을 가입 ..

+1

나는 이것이 대답이고 논평이 아닌 이유를 잘 모릅니다. 오른쪽 테이블에 일치하는 행이없는 경우 왼쪽 결합이 더 많은 결과를 반환 할 수도 있지만 OP는 자신의 경우 두 행이 동일한 행을 생성한다는 것을 명확하게 나타냅니다. 잘못된 형식의 쿼리 (예 : 오른쪽/바깥 쪽의 조인/필터 기준)가 원인 일 수 있지만 왼쪽 표에는 오른쪽 표와 일치하지 않는 행이 없을 수 있습니다. –

0

왼쪽 조인을 내부 조인으로 변경하면 결과가 달라지지 않을까 걱정됩니다. 나는 where 절에있는 테이블의 왼쪽에 효과적으로 내부 조인으로 바꾸는 조건을 가지고 있다고 의심 할 것이다. 같은

뭔가 :

select * 
from table1 t1 
left join table2 t2 on t1.myid = t2.myid 
where t2.somefield = 'something' 

그래서 내가 내 쿼리로 시작하는 잘못된 것을 걱정된다, 그럼 내가 걱정 것이다 첫번째

select * 
from table1 t1 
left join table2 t2 
on t1.myid = t2.myid and t2.somefield = 'something' 

같은 것이 아니다 공연. 내부 조인은 NOT이고 왼쪽 조인의 성능이 향상되어 서로 다른 두 가지를 의미하며 모든 레코드에 대해 항상 일치하는 테이블이 없으면 다른 결과를 반환해야합니다. 이 경우 다른 쪽이 성능을 향상시키지 못하기 때문에 내부 조인으로 변경됩니다.

왼쪽 조인이 더 오래 걸리는 이유에 대해 가장 잘 추측하면 where 절로 필터링 된 더 많은 행에 합류한다는 것입니다. 하지만 그건 그냥 추측입니다. 당신이 실행 계획을 봐야한다는 것을 알기 위해서.

+0

일반적으로 나는 동의하지만 공정하기 때문에 오늘 데이터가 'INNER JOIN'에 쉽게 맞을지라도 'LEFT OUTER JOIN'을 사용하여 쿼리를 작성했습니다. 결과는 항상 결과가 항상 유지 될 필요는 없습니다. 나중에 도입 된 일치하지 않는 행 (또는 과거에 있었던 행)이있을 수 있습니다. 그래서 내외부 조인이 오늘 같은 결과를 가져 오는 경우 경보 음을 너무 크게 들리는 경향이 없습니다. 실행 계획이 다르다는 사실은 조인 키워드보다 두 쿼리 사이에 차이가 더 많음을 알게합니다. –