Amazon Redshift 쿼리 계획에 대한 EXPLAIN 연산자 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Redshift 쿼리 계획에 대한 EXPLAIN 연산자

이번 섹션에서는 EXPLAIN 출력에서 가장 자주 표시되는 연산자에 대해서 간략히 설명합니다.

순차 스캔

순차적 스캔 연산자(Seq Scan)는 테이블 스캔을 나타냅니다. Seq Scan이 처음부터 끝까지 테이블의 열을 각각 순차적으로 스캔하고 WHERE 절에서 각 행의 쿼리 제약 조건을 평가합니다.

조인 연산자

Amazon Redshift는 조인되는 테이블의 물리적 설계, 조인에 필요한 데이터의 위치, 쿼리 자체의 특정 요건을 기반으로 여러 가지 조인 연산자를 선택합니다.

중첩 루프

중첩 루프는 주로 교차 조인에 사용됩니다. 크로스 조인은 조인 조건이 없기 때문에 두 테이블의 데카르트 곱이 발생하는 원인이 됩니다. 중첩 루프는 일반적으로 중첩 루프 조인으로 실행되기 때문에 가능한 조인 유형 중에서 속도가 가장 느립니다. 중첩 루프가 존재하는 경우 STL_ALERT_EVENT_LOG에 중첩 루프 알림 이벤트가 표시될 수 있습니다. 다음 쿼리를 실행하여 중첩 루프가 있는 쿼리를 식별할 수 있습니다.

select q.query, trim(q.querytxt) as sql_query, q.starttime from stl_query q join stl_alert_event_log l on l.query = q.query and l.event like 'Nested Loop Join in the query plan%' order by q.starttime desc;

해시 조인 및 해시

해시 조인 및 해시 연산자는 일반적으로 중첩 루프 조인보다 빠릅니다. 이러한 연산자는 내부 조인과 왼쪽 및 오른쪽 외부 조인에 대해 사용됩니다. 조인 열이 둘 다 분산 키 및 정렬 키가 아닌 테이블을 조인할 때 해시 조인 및 해시 연산자를 사용할 수 있습니다. 해시 연산자는 조인의 내부 테이블에 대한 해시 테이블을 생성합니다. 해시 조인 연산자는 외부 테이블을 읽고 조인 열을 해시하며 내부 해시 테이블에서 일치하는 항목을 찾습니다.

병합 조인

병합 조인 연산자는 일반적으로 가장 빠른 조인이고, 내부 조인과 외부 조인에 사용됩니다. 병합은 전체 조인에 대해 사용되지 않습니다. 조인 열이 둘 다 분산 키 및 정렬 키인 테이블을 조인할 때 그리고 조인 테이블에서 정렬되지 않은 비율이 20% 미만일 때 병합 조인을 사용할 수 있습니다. 병합 조인 연산자는 정렬된 테이블 2개를 순서대로 읽고 일치하는 행을 찾습니다. 정렬되지 않은 행의 비율을 보려면 SVV_TABLE_INFO 시스템 테이블을 쿼리합니다.

집계 연산자

쿼리 계획은 집계 함수 및 GROUP BY 작업과 관련된 쿼리에서 다음과 같은 연산자를 사용합니다.

  • AggregateAVG, SUM 같은 스칼라 집계 함수에 대한 연산자

  • HashAggregate – 정렬되지 않고 그룹화된 집계 함수에 대한 연산자

  • GroupAggregate – 정렬되고 그룹화된 집계 함수에 대한 연산자

정렬 연산자

쿼리 계획은 쿼리가 결과 세트를 정렬하거나 병합해야 할 때 다음과 같은 연산자를 사용합니다.

  • SortORDER BY 절 및 기타 정렬 작업(예: UNION 쿼리 및 조인에 필요한 정렬, SELECT DISTINCT 쿼리, 창 함수) 평가

  • Merge – 병렬 작업에서 파생된 중간 정렬 결과에 따라 최종 정렬 결과 산출

UNION, INTERSECT 및 EXCEPT 연산자

쿼리 계획은 UNION, INTERSECT, EXCEPT를 사용하는 집합 작업과 관련된 쿼리에서 다음과 같은 연산자를 사용합니다.

  • SubqueryUNION 쿼리를 실행하는 데 사용됨

  • Hash Intersect DistinctINTERSECT 쿼리를 실행하는 데 사용됨

  • SetOp ExceptEXCEPT 또는 MINUS 쿼리를 실행하는 데 사용됨

기타 연산자

또한 다음과 같은 연산자가 루틴 쿼리의 EXPLAIN 출력에 자주 나타납니다.

  • UniqueSELECT DISTINCT 쿼리 및 UNION 쿼리에 대한 중복을 제거합니다.

  • LimitLIMIT 절 처리

  • Window – 창 함수 실행

  • Result – 어떤 테이블 액세스도 관련되지 않는 스칼라 함수 실행

  • Subplan – 특정 하위 쿼리에 사용됨

  • Network – 추가 처리를 위해 중간 결과를 리더 노드로 전송

  • Materialize – 중첩 루프 조인과 일부 병합 조인에 대한 입력을 위한 행 구체화