2012-09-14 2 views
1

"왼쪽 외부 조인"과 "모든 공용"사이의 최상의 솔루션을 알고 싶습니다. 데이터베이스는 PostgreSQL입니다. 전혀 UNION과postgresql과의 성능 비교 : left join vs union 모두

검색어 : 왼쪽 외부와

SELECT * FROM element, user WHERE elm_usr_id = usr_id 
UNION ALL 
SELECT * FROM element WHERE elm_usr_id ISNULL; 

쿼리 가입 :

SELECT * FROM element LEFT OUTER JOIN user ON elm_usr_id = usr_id; 

답변

1

두 개의 쿼리가 동일한 결과를 생성하지 않을 수 있습니다.

UNION ALL을 사용한 쿼리는 null 값으로 인해 일치하지 않는 더하기 행과 일치하는 행을 elm_usr_id에 반환합니다.

LEFT JOIN (LEFT OUTER JOIN과 동일)을 사용하는 쿼리는 해당 값이 없기 때문에 일치하지 않는 더하기 행과 일치하는 행을 반환합니다.

모든 행을 볼 것으로 예상되는 경우 LEFT JOIN 쿼리가 더 안전합니다.

원래 질문으로 돌아가서 LEFT JOIN 쿼리는 인덱스 활용에 가장 적합합니다. 예를 들어 정렬 된 결과를 얻으려면 UNION 쿼리가 가장 느립니다. 또는 조회가 기본 조회의 부속 조회 인 경우, UNION은 table [요소] 색인의 가능한 사용을 f 지합니다. 따라서 하위 쿼리의 JOIN 또는 WHERE를 수행하는 것이 느려집니다.

1

내가

로, LEFT OUTER이 모든 특정 시나리오의 조합을 통해 가입 제안 노동 조합에서는 모두 테이블을 두 번 읽어야합니다. 반면 LEFT OUTER JOIN은 한 번만

1

LEFT JOIN 일 수도 있지만 EXPLAIN ANALYSE SELECT...을 실행하면 쿼리 계획을 볼 수 있습니다. elm_usr_id의 null-ness를 기반으로 열을 수정하는 경우 UNION ALL 형식이 더 명확 할 수 있지만 LEFT JOIN으로 열을 수정하려면 항상 CASE을 사용할 수 있습니다.