2015-02-07 3 views
2

여러 테이블을 사용하는 복잡한 쿼리의 경우 더 나은 방법입니까? 공통 테이블 식 또는 하위 쿼리?Amazon Redshift : 복잡한 쿼리에 대한 CTE 또는 하위 쿼리?

+0

IIRC 레드 쉬프트는 8.4 포스트그레스 이전 버전을 기반으로하므로 * CTE가 없습니다. 선택이 쉬워졌습니다. – wildplasser

+1

Redshift는 CTE (절 포함)를 지원합니다. Redshift 설명서 [here] (http://docs.aws.amazon.com/redshift/latest/dg/r_WITH_clause.html)를 참조하십시오. – DogBoneBlues

답변

1

하위 쿼리는 Common 테이블 식을 사용하는 것보다 훨씬 낫습니다. 쿼리 분석기는 공통 테이블 식 대신 여러 하위 쿼리를 사용할 때 더 잘 수행됩니다.

+0

이 대답에 동의하지 않습니다. 나는 새로운 Redshift 사용자이지만 CTE가있는 두 개의 매우 간단한 쿼리와 하위 쿼리가있는 두 개의 쿼리를 작성했습니다. 내가 양쪽 모두를 위해 설명 계획을 점검했을 때 정확히 똑같이 나왔다! 다른 DBS가 있지만 Redshift에서 약간의 차이가있을 수 있지만 컴파일러에서 두 가지 방법으로 평가 한 것처럼 보입니다. 코드를 작성하는 것은 개인적인 선택입니다. –

0

그러나 상관 관계가있는 하위 쿼리를 사용하는 것보다 외부 조인을 다시 작성하는 것이 훨씬 낫습니다. Redshift에 인덱스가 없으므로 각 데이터 행에 대해 하위 쿼리를 강제 실행하면 매우 많은 O (n) 연산이 발생합니다.

+0

단순 하위 쿼리는 외부 쿼리의 값을 사용하지 않고 한 번만 계산됩니다! 그래서, 그것은 O (n2) 작업으로 끝나지 않을 것입니다. – untitled

+0

당신과 완전히 동의합니다 : 간단한 하위 쿼리. 작성자는 한 가지 방법이나 다른 방법을 지정하지 않았습니다 (CTE와의 비교로 간단한 하위 쿼리가 암시되는 것은 맞지만). _ 관련 하위 쿼리의 엄청난 부정적인 영향을 감안할 때이 문제를 부각시키는 것이 현명하다고 생각했습니다. – DogBoneBlues

0

나는 임시 테이블을 말할 것입니다. 임시 테이블에서는 DIST KEY를 정의하고 성능을 제어 할 수 있습니다. CTE가 그 우물을 수행하지 않을 수도 있습니다.