2013-03-27 2 views
10

아래와 같은 2 가지 쿼리 중에서 성능에 가장 적합한 것이 무엇인지 알고 싶습니다.쿼리 성능 INNER JOIN ON AND AND

우선 일 :없이 WHERE 단지 AND ON으로 절]

SELECT related_tabid AS tabid, label, t.name 
    FROM relatedlists r 
    INNER JOIN tab t 
     ON t.tabid = r.tabid 
      AND t.name = 'Leads' 
      AND r.is_active=1 and r.related_tabid <> 0 
      AND t.is_active=1 
    ORDER BY label 

번째 :

SELECT related_tabid AS tabid, label, t.name 
    FROM relatedlists r 
    INNER JOIN tab t 
     ON t.tabid = r.tabid 
     WHERE t.name = 'Leads' 
      AND r.is_active=1 and r.related_tabid <> 0 
      AND t.is_active=1 
    ORDER BY label 

답변

5
[여기서 대신 ON의와 연관된 WHERE 절 사용 AND]

사용 된 조인이 INNER JOIN이기 때문에 두 쿼리가 동일합니다. INNER JOIN 기본적으로 다른 테이블에서 적어도 일치하는 행만 필터링합니다. 두 테이블조차도 교환이므로 결과는 동일합니다.

그러나 LEFT JOIN을 통해 이들을 합치면 두 쿼리가 서로 다르며 다른 결과가 나타납니다.

+0

귀하의 회신에 감사드립니다. 내가 LEFT JOIN을 사용하면 성능이 더 빨라 집니까? – Rashidul

+0

귀하의 질문에 대한 좋은 기사 : [내부 결합 대 왼쪽 조인 성능] (http://stackoverflow.com/questions/2726657/inner-join-vs-left-join-performance-in-sql-server) –

1

두 쿼리의 유일한 차이점은 하나는 WHERE 절에 t.name = 'Leads'이 있고 하나는 JOIN 절에 있습니다. 옳은?

둘 사이에는 차이가 없습니다. SQL 최적화 프로그램은이 두 가지를 모두 동일하게 처리합니다. 확인을 위해 각각에 대해 EXPLAIN을 수행하십시오.

+0

예, 둘 다 동일합니다. 감사 – Rashidul

0

이론상 첫 번째 쿼리는 'where'에 텍스트 비교를 넣기를 원하고 테이블 조합의 '논리'정의에 조인하고 'where'는 값을 지정하는 데만 사용됩니다. 비교시 다를 수 있습니다. 여기서 t.name = 'Leads'; 안부