Aurora MySQL 힌트 - Amazon Aurora

Aurora MySQL 힌트

Aurora MySQL 쿼리와 함께 SQL 힌트를 사용하여 성능을 미세 조정할 수 있습니다. 또한 힌트를 사용하여 예기치 않은 조건으로 인해 중요한 쿼리에 대한 실행 계획이 변경되는 것을 방지할 수 있습니다.

작은 정보

힌트가 쿼리에 미치는 영향을 확인하려면 EXPLAIN 문에서 생성된 쿼리 계획을 검토합니다. 힌트가 있는 쿼리 계획과 없는 쿼리 계획을 비교합니다.

Aurora MySQL 버전 3에서는 MySQL Community Edition 8.0에서 사용 가능한 모든 힌트를 사용할 수 있습니다. 이러한 힌트에 대한 자세한 내용은 MySQL 참조 설명서최적화 프로그램 힌트를 참조하세요.

다음 힌트는 Aurora MySQL 버전 2에서 사용할 수 있습니다. 이러한 힌트는 Aurora MySQL 버전 2의 해시 조인 기능을 사용하는 쿼리, 특히 병렬 쿼리 최적화를 사용하는 쿼리에 적용됩니다.

PQ, NO_PQ

최적화 프로그램이 테이블별 또는 쿼리별로 병렬 쿼리를 사용하도록 할지 여부를 지정합니다.

PQ는 최적화 프로그램이 지정된 테이블 또는 전체 쿼리(블록)에 대해 병렬 쿼리를 사용하도록 합니다. NO_PQ는 최적화 프로그램이 지정된 테이블 또는 전체 쿼리(블록)에 대해 병렬 쿼리를 사용하지 못하도록 합니다.

이 힌트는 Aurora MySQL 버전 2.11 이상에서 사용할 수 있습니다. 다음 예시에서는 이 힌트를 사용하는 방법을 보여줍니다.

참고

테이블 이름을 지정하면 최적화 프로그램은 이러한 선별된 테이블에만 PQ/NO_PQ 힌트를 적용합니다. 테이블 이름을 지정하지 않으면 쿼리 블록의 영향을 받는 모든 테이블에 PQ/NO_PQ 힌트가 적용됩니다.

EXPLAIN SELECT /*+ PQ() */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ PQ(t1) */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ PQ(t1,t2) */ f1, f2 FROM num1 t1, num1 t2 WHERE t1.f1 = t2.f21; EXPLAIN SELECT /*+ NO_PQ() */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ NO_PQ(t1) */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ NO_PQ(t1,t2) */ f1, f2 FROM num1 t1, num1 t2 WHERE t1.f1 = t2.f21;
HASH_JOIN, NO_HASH_JOIN

쿼리에 해시 조인 최적화 방법을 사용할지 여부를 선택할 수 있는 병렬 쿼리 최적화 프로그램의 기능을 설정하거나 해제합니다. HASH_JOIN을 사용하면 해당 메커니즘이 더 효율적인 경우 최적화 프로그램이 해시 조인을 사용할 수 있습니다. NO_HASH_JOIN은 최적화 프로그램이 쿼리에 해시 조인을 사용하지 못하게 합니다. 이 힌트는 Aurora MySQL 버전 2.08 이상에서 사용할 수 있습니다. Aurora MySQL 버전 3에서는 아무런 효과가 없습니다.

다음 예시에서는 이 힌트를 사용하는 방법을 보여줍니다.

EXPLAIN SELECT/*+ HASH_JOIN(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ NO_HASH_JOIN(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
HASH_JOIN_PROBING, NO_HASH_JOIN_PROBING

해시 조인 쿼리에서 조인의 프로브 측에 지정된 테이블을 사용할지를 지정합니다. 쿼리는 프로브 테이블의 전체 내용을 읽는 대신 빌드 테이블의 열 값이 프로브 테이블에 있는지를 테스트합니다. HASH_JOIN_PROBINGHASH_JOIN_BUILDING을 사용하여 쿼리 텍스트 내에서 테이블을 재정렬하지 않고 해시 조인 쿼리가 처리되는 방법을 지정할 수 있습니다. 이 힌트는 Aurora MySQL 버전 2.08 이상에서 사용할 수 있습니다. Aurora MySQL 버전 3에서는 아무런 효과가 없습니다.

다음 예제에서는 이 힌트를 사용하는 방법을 보여 줍니다. HASH_JOIN_PROBING 테이블에 T2 힌트를 지정하면 NO_HASH_JOIN_PROBING 테이블에 T1을 지정하는 것과 같은 효과가 있습니다.

EXPLAIN SELECT /*+ HASH_JOIN(t2) HASH_JOIN_PROBING(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ HASH_JOIN(t2) NO_HASH_JOIN_PROBING(t1) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
HASH_JOIN_BUILDING, NO_HASH_JOIN_BUILDING

해시 조인 쿼리에서 조인의 빌드 측에 지정된 테이블을 사용할지를 지정합니다. 쿼리는 이 테이블의 모든 행을 처리하여 다른 테이블과 상호 참조할 열 값 목록을 작성합니다. HASH_JOIN_PROBINGHASH_JOIN_BUILDING을 사용하여 쿼리 텍스트 내에서 테이블을 재정렬하지 않고 해시 조인 쿼리가 처리되는 방법을 지정할 수 있습니다. 이 힌트는 Aurora MySQL 버전 2.08 이상에서 사용할 수 있습니다. Aurora MySQL 버전 3에서는 아무런 효과가 없습니다.

다음 예시에서는 이 힌트를 사용하는 방법을 보여줍니다. HASH_JOIN_BUILDING 테이블에 T2 힌트를 지정하면 NO_HASH_JOIN_BUILDING 테이블에 T1을 지정하는 것과 같은 효과가 있습니다.

EXPLAIN SELECT /*+ HASH_JOIN(t2) HASH_JOIN_BUILDING(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ HASH_JOIN(t2) NO_HASH_JOIN_BUILDING(t1) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
JOIN_FIXED_ORDER

쿼리의 테이블이 쿼리에 나열된 순서에 따라 조인되도록 지정합니다. 이는 세 개 이상의 테이블을 포함하는 쿼리에 유용합니다. 이는 MySQL STRAIGHT_JOIN 힌트를 대체하기 위한 것이며, MySQL JOIN_FIXED_ORDER 힌트에 해당합니다. 이 힌트는 Aurora MySQL 버전 2.08 이상에서 사용할 수 있습니다.

다음 예시에서는 이 힌트를 사용하는 방법을 보여줍니다.

EXPLAIN SELECT /*+ JOIN_FIXED_ORDER() */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
JOIN_ORDER

쿼리의 테이블에 대한 조인 순서를 지정합니다. 이는 세 개 이상의 테이블을 포함하는 쿼리에 유용합니다. 이는 MySQL JOIN_ORDER 힌트에 해당합니다. 이 힌트는 Aurora MySQL 버전 2.08 이상에서 사용할 수 있습니다.

다음 예시에서는 이 힌트를 사용하는 방법을 보여줍니다.

EXPLAIN SELECT /*+ JOIN_ORDER (t4, t2, t1, t3) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
JOIN_PREFIX

조인 순서에서 먼저 넣을 테이블을 지정합니다. 이는 세 개 이상의 테이블을 포함하는 쿼리에 유용합니다. 이는 MySQL JOIN_PREFIX 힌트에 해당합니다. 이 힌트는 Aurora MySQL 버전 2.08 이상에서 사용할 수 있습니다.

다음 예시에서는 이 힌트를 사용하는 방법을 보여줍니다.

EXPLAIN SELECT /*+ JOIN_PREFIX (t4, t2) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
JOIN_SUFFIX

조인 순서에 마지막으로 넣을 테이블을 지정합니다. 이는 세 개 이상의 테이블을 포함하는 쿼리에 유용합니다. 이는 MySQL JOIN_SUFFIX 힌트에 해당합니다. 이 힌트는 Aurora MySQL 버전 2.08 이상에서 사용할 수 있습니다.

다음 예시에서는 이 힌트를 사용하는 방법을 보여줍니다.

EXPLAIN SELECT /*+ JOIN_SUFFIX (t1) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);

해시 조인 쿼리 사용에 대한 자세한 내용은 해시 조인을 사용하여 대규모 Aurora MySQL 조인 쿼리 최적화 단원을 참조하십시오.