거기는 ANSI 구문을 사용 인포믹스 쿼리 성능 차이 사용시차이 ANSI 외부 조인과 외부 인포믹스
SELECT ...
OUTER (some_table,
OUTER(some_other_table))
WHERE <join_conditions>
덕분에
거기는 ANSI 구문을 사용 인포믹스 쿼리 성능 차이 사용시차이 ANSI 외부 조인과 외부 인포믹스
SELECT ...
OUTER (some_table,
OUTER(some_other_table))
WHERE <join_conditions>
덕분에
그렇습니다. 표준 외부 조인과 Informix 스타일 외부 조인의 의미에 차이가 있습니다. 필연적으로 쿼리 계획에 차이가 있음을 의미합니다.
일반적으로 새 코드 또는 수정 된 코드에 표준 표기법을 사용합니다. - (변경되지 않은) 레거시 코드에 대해 Informix 스타일의 외부 조인 표기법을 남겨두고 새 조인 표기법을 사용하도록조차 업데이트하는 것이 좋습니다.
차이점은 무엇입니까? 공정한 질문 - 설명하기가 어렵고, 여전히 좋은 (그럴듯한 예를 생각해내는) 것이 더 힘들다. 기본적으로 Informix 스타일 표기법은 외부 조인 된 테이블에서 해당 행을 거부하는 값을 기반으로하는 조건이있는 경우에도 '지배적 인'테이블 (비 외부 테이블)의 행을 유지합니다.
SELECT i.*, o.*
FROM DominantTable AS i, OUTER OuterJoinedTable AS o
WHERE i.pk_column = o.fk_column;
SELECT i.*, o.*
FROM DominantTable AS i
LEFT OUTER JOIN OuterJoinedTable AS o
ON i.pk_column = o.fk_column;
이 두 쿼리는 반드시 동일한 결과를 생성하지 않는 :
이 두 쿼리
는 동일한 결과를DominantTable OuterJoinedTable
pk_column other_column fk_column alt_column
1 twenty 1 3
: 차이는이 같은 상황에서 발생
SELECT i.*, o.*
FROM DominantTable AS i, OUTER OuterJoinedTable AS o
WHERE i.pk_column = o.fk_column
AND (o.alt_column IS NULL OR o.alt_column = 1);
SELECT i.*, o.*
FROM DominantTable AS i
LEFT OUTER JOIN OuterJoinedTable AS o
ON i.pk_column = o.fk_column
WHERE (o.alt_column IS NULL OR o.alt_column = 1);
표준 LEFT OUTER JOIN 표기법은 빈 세트를 결과로 생성합니다. 인포믹스 스타일의 결과를 생성한다 조인 발 DominantTable
pk_column other_column fk_column alt_column
1 twenty null null
데이터 인해 지배적 테이블 필터 조건 거절되지 있으므로 인포믹스는 보존된다. 표준 조인은 외부 조인을 수행 한 다음 결과를 필터링합니다.
둘 모두에 대한 실행 계획을 테스트하고 확인하거나 게시하면 해당 내용을 소화하는 데 도움이됩니다.
다른 현재 데이터베이스 엔진에서는 동일한 최적화 실행 계획이 실행됩니다.
기타 DBMS는 Informix 스타일의 외부 조인 인 AFAIK를 구현하지 않습니다. 최소한 나는 어떤 사람들이하는지 알고 싶어 할 것입니다. –
멋진 답변이지만 실적은 – kubek2k
인데 우리가 합류하기 위해서만 조건을 사용한다고 가정하면 쿼리가 동일 할 것입니까? – kubek2k
내 대답 읽기 - 뭐라고 말합니까? –