Amzon Redshift 쿼리 최적화(Sortkey, DistKey)

ssyyyoon·2024년 4월 23일

배경


  • Redshift는 SQL Index(B-Tree)과 다른 방법(Sort Key, Dist Key)를 사용해서 Querying Optimization
  • Primary Key 역시 RedShift에서 Index로 사용되지 않음.

내용


정렬 키와 분산 키

Redshift에서는 두 가지 유형의 인덱스를 지원합니다:

  1. 정렬 키(Sort Key): 테이블의 하나 이상의 열을 기반으로 데이터를 정렬하는 데 사용됩니다.

    CREATE TABLE employees (
        id INTEGER,
        last_name VARCHAR(20),
        first_name VARCHAR(20),
        email VARCHAR(50),
        department VARCHAR(20),
        PRIMARY KEY(id),
        SORTKEY(last_name) #sortkey
    );
  2. 분산 키(Distribution Key): 데이터를 여러 노드에 분산시키는 데 사용됩니다.

    CREATE TABLE employees (
        id INTEGER,
        last_name VARCHAR(20),
        first_name VARCHAR(20),
        email VARCHAR(50),
        department VARCHAR(20),
        PRIMARY KEY(id),
        DISTKEY(department) #distkey
    );
  • 정렬 키와 분산 키에 대한 자세한 내용

    정렬 키

    • 하나 이상의 열을 기반으로 데이터 정렬
    • 빠른 검색 및 필터링 가능
    • 범위 제한 스캔 및 병합 조인 최적화
    • 복합 정렬 키 가능

    분산 키

    • 데이터를 여러 노드에 분산
    • 조인 키, 그룹화 키, 필터링 기준 고려
    • 균등한 분산을 위해 값 고르게 분포
    • 노드 간 데이터 이동 최소화, 성능 향상

    선택 시 고려 사항

    • 쿼리 패턴 분석: 정렬 키와 분산 키 선택
    • 조인 최적화: 노드 간 데이터 이동 최소화
    • 데이터 분포: 균등한 분산 유지
    • 정렬 순서: 쿼리에서 자주 사용되는 정렬 순서 고려
    • 스토리지 효율성: 데이터 압축률 향상 및 공간 효율적 사용

B-Tree와 다른 점

  1. 인덱스 구조
    • B-Tree 인덱스: 균형 잡힌 트리 구조를 사용하여 데이터를 저장하고 검색합니다. 각 노드는 키 값과 자식 노드에 대한 포인터를 포함합니다.
    • 정렬 키 및 분산 키: 데이터 자체를 정렬하고 분산시키는 방법을 사용합니다. 별도의 인덱스 구조를 유지하지 않습니다.
  2. 데이터 저장 방식
    • B-Tree 인덱스: 인덱스와 실제 데이터가 별도로 저장됩니다. 인덱스는 키 값과 데이터 레코드에 대한 포인터를 저장합니다.
    • 정렬 키 및 분산 키: 데이터 자체를 정렬 키와 분산 키를 기준으로 정렬하고 분산시켜 저장합니다.
  3. 스토리지 오버헤드
    • B-Tree 인덱스: 인덱스를 별도로 저장하므로 추가적인 스토리지 공간을 필요로 합니다.
    • 정렬 키 및 분산 키: 데이터 자체를 정렬하고 분산시키므로 별도의 인덱스 저장 공간이 필요하지 않습니다.

RedShift에서 Primary Key의 역할

Redshift에서 Primary Key는 데이터 무결성을 유지하고 고유성을 보장하는 역할을 하지만, 쿼리 성능 최적화를 위해서는 정렬 키와 분산 키를 적절히 선택하는 것이 더 중요합니다.

  • Primary Key 제약 조건은 테이블의 고유성을 보장하지만, 인덱스 생성이나 쿼리 성능 향상에는 직접적인 영향을 주지 않습니다
  • 테이블의 고유한 식별자로 사용됩니다.
  • 외래 키(Foreign Key) 관계를 정의할 때 참조되는 테이블의 Primary Key를 사용합니다.
  • 데이터의 무결성을 유지하는 데 도움이 됩니다.
  • Primary Key 열을 정렬 키나 분산 키로 선택할 수 있지만, 반드시 일치할 필요는 없습니다.

ALTER TABLE

  1. 정렬 키 업데이트:

    ALTER TABLE exam_logs ALTER SORTKEY (created_at);
    
  2. 분산 키 업데이트:

    ALTER TABLE exam_logs ALTER DISTSTYLE KEY DISTKEY (user_id);
    
  3. 정렬 키와 분산 키를 모두 업데이트:

       ALTER TABLE table_name ALTER DISTSTYLE KEY DISTKEY (column_name) ALTER SORTKEY (column1, column2, ...);
       
profile
데이터 분석가로 일하고 있습니다.

0개의 댓글