쿼리 최적화 - Amazon Athena

쿼리 최적화

Athena에서 SQL 쿼리를 최적화하려는 경우 이 섹션의 제안 사항을 사용합니다.

ORDER BY 절과 함께 LIMIT 사용

ORDER BY 절은 정렬된 순서로 데이터를 반환합니다. 이를 위해 Athena에서 모든 데이터 행을 단일 워커 노드로 보낸 후 행을 정렬해야 합니다. 이러한 유형의 쿼리는 오래 실행되거나 실패할 수도 있습니다.

쿼리의 효율성을 높이려면 상위 또는 하위 N개 값을 확인하고 LIMIT 절도 사용합니다. 그러면 정렬과 제한을 단일 작업자가 아닌 개별 워커 노드로 푸시하여 정렬 비용을 크게 줄일 수 있습니다.

JOIN 절 최적화

두 테이블을 조인하는 경우 Athena는 오른쪽에 있는 테이블을 워커 노드에 분산시킨 후 왼쪽의 테이블을 스트리밍하여 조인을 수행합니다.

따라서 조인 왼쪽에 큰 테이블을 지정하고 오른쪽에 작은 테이블을 지정합니다. 이렇게 하면 Athena는 메모리를 덜 사용하고 지연 시간을 줄이면서 쿼리를 실행합니다.

다음 사항에도 주의하세요.

  • 여러 JOIN 명령을 사용하는 경우 가장 큰 테이블부터 가장 작은 테이블의 순서로 지정합니다.

  • 쿼리에 필요하지 않는 한 크로스 조인을 사용하지 않습니다.

GROUP BY 절 최적화

GROUP BY 연산자는 GROUP BY 열을 기반으로 워커 노드에 행을 분산시킵니다. 이러한 열은 메모리에서 참조되며 행을 모을 때 값이 비교됩니다. GROUP BY 열이 일치하면 값이 함께 집계됩니다. 이 프로세스의 작동 방식을 고려하면 카디널리티가 가장 높은 열부터 가장 낮은 열의 순서로 정렬하는 것이 좋습니다.

문자열 대신 숫자 사용

숫자는 문자열에 비해 메모리 사용량이 적고 처리 속도가 빠르므로 가능하면 문자열 대신 숫자를 사용합니다.

열 수 제한

데이터를 저장하는 데 필요한 총 메모리 양을 줄이려면 SELECT 문에 지정된 열 수를 제한합니다.

LIKE 대신 정규식 사용

큰 문자열에서 LIKE '%string%'과 같은 절을 포함하는 쿼리는 컴퓨팅 집약적일 수 있습니다. 문자열 열에서 여러 값을 필터링하는 경우 대신 regexp_like() 함수와 정규식을 사용합니다. 값의 긴 목록을 비교할 때 특히 유용합니다.

LIMIT 절 사용

쿼리를 실행할 때 모든 열을 선택하는 대신 LIMIT 절을 사용하여 필요한 열만 반환합니다. 이렇게 하면 쿼리 실행 파이프라인을 통해 처리되는 데이터 세트의 크기가 줄어듭니다. LIMIT 절은 문자열 기반 열 수가 많은 테이블을 쿼리할 때 더 유용합니다. LIMIT 절은 쿼리에서 여러 조인 또는 집계를 수행할 때 유용합니다.