검색 최적화를 통한 조인 쿼리 속도 향상

검색 최적화 서비스는 조인의 빌드 측에서 고유 값이 적은 조인 쿼리의 성능을 향상시킬 수 있습니다.

예를 들어, 검색 최적화 서비스는 이러한 유형의 조인 성능을 개선할 수 있습니다.

  • products 는 각 제품에 대한 행이 포함된 테이블이고 sales 는 제품의 각 판매에 대한 행이 포함된 테이블이라고 가정합니다. products 테이블은 행 수가 더 적고 sales 테이블보다 작습니다. 특정 제품의 모든 판매를 찾으려면 sales 테이블(큰 테이블)을 products 테이블(작은 테이블)과 조인합니다. products 테이블이 작기 때문에 조인의 빌드 쪽에는 고유한 값이 거의 없습니다.

    참고

    데이터 웨어하우징에서 큰 테이블을 종종 팩트 테이블 이라고 합니다. 작은 테이블을 차원 테이블 이라고 합니다. 이 항목의 나머지 부분에서는 조인에서 Large 테이블과 Small 테이블을 참조할 때 이 용어를 사용합니다.

  • customers 는 각 고객에 대한 행이 포함된 테이블이고 sales 는 각 판매에 대한 행이 포함된 테이블이라고 가정합니다. 두 테이블 모두 Large입니다. 특정 고객의 모든 매출을 찾으려면 sales 테이블(프로브 쪽)을 customers 테이블(빌드 쪽)과 조인하고 필터를 사용하여 조인의 빌드 쪽에 소수의 고유 값이 나타나도록 합니다.

다음 섹션에서는 조인 쿼리에 대한 검색 최적화 지원에 대한 자세한 정보를 제공합니다.

조인 쿼리에 대한 검색 최적화 사용 설정

조인 쿼리의 성능을 향상시키려면 쿼리의 조인 조건자에 있는 열에 대해 검색 최적화가 사용하도록 설정되어 있는지 확인합니다. 또한 조인의 빌드 쪽에 작은 차원 테이블이거나 선택적 필터로 인해 고유 값이 적은지 확인합니다. 쿼리의 검색 최적화 런타임 비용은 조인의 빌드 측에서 조회해야 하는 고유 값의 수에 비례합니다. 이 숫자가 너무 크면 Snowflake는 검색 액세스 경로를 사용하지 않고 대신 일반 테이블 액세스 경로를 사용할 수 있습니다.

조인 쿼리의 성능을 개선하려면 조인의 프로브 쪽 테이블에 대해 검색 최적화 를 사용하도록 설정합니다. 이 테이블은 일반적으로 팩트 테이블과 같이 조인 쿼리에서 필터링되지 않는 큰 테이블입니다.

ALTER TABLE … ADD SEARCH OPTIMIZATION 명령을 사용하여 다음을 수행합니다.

  • 특정 열에 대한 검색 최적화를 사용 설정합니다.

  • 테이블의 모든 열에 대해 검색 최적화를 사용 설정합니다.

일반적으로, 특정 열에 대해서만 검색 최적화를 활성화하는 것이 가장 좋습니다. ON EQUALITY 절을 사용하여 열을 지정합니다. 이 예제에서는 특정 열에 대한 검색 최적화를 활성화합니다.

ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON EQUALITY(mycol);
Copy

지원되는 데이터 타입의 모든 열에 대해 EQUALITY 를 지정하려면(반정형GEOGRAPHY 제외):

ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
Copy

지원되는 조인 조건자

검색 최적화 서비스는 다음 유형의 조인 조건자로 쿼리 성능을 개선할 수 있습니다.

  • probe_side_table.column = build_side_table.column 형태의 같음 조건자.

  • 조건자의 빌드 측 피연산자에 대한 변환(예: 문자열 연결, 더하기 등)을 수행합니다.

  • 여러 같음 조건자의 접속사(AND).

지원되는 조인 쿼리의 예

이 섹션에서는 검색 최적화의 이점을 누릴 수 있는 조인 쿼리의 예를 보여 줍니다.

예제: 단순 비교 조건자

다음은 단순한 같음 조건자를 조인 조건자로 사용하는 지원 쿼리의 예입니다. 이 쿼리는 sales 라는 테이블을 customers 라는 테이블과 조인합니다. 프로브 사이드 테이블(sales)은 크기가 크고 검색 최적화가 활성화되어 있습니다. 빌드 측 테이블 customers 도 크지만 customer_id 열의 선택적 필터로 인해 이 테이블의 입력값은 작습니다.

SELECT sales.date, customer.name
  FROM sales JOIN customers ON (sales.customer_id = customers.customer_id)
  WHERE customers.customer_id = 2094;
Copy

예제: 차원 측 피연산자에서 변환된 조건자

다음 쿼리는 sales 라는 팩트 테이블을 products 라는 차원 테이블과 조인합니다. 팩트 테이블은 크고 검색 최적화가 활성화되어 있습니다. 치수 테이블이 작습니다.

이 쿼리는 조인 조건의 값을 곱하는 등 조건자의 차원 측 피연산자를 변환하며, 검색 최적화의 이점을 누릴 수 있습니다.

SELECT sales.date, product.name
  FROM sales JOIN products ON (sales.product_id = product.old_id * 100)
  WHERE product.category = 'Cutlery';
Copy

예제: 여러 열에 걸친 조건자

조인 조건자가 여러 열에 걸쳐 있는 쿼리는 검색 최적화의 이점을 누릴 수 있습니다.

SELECT sales.date, product.name
  FROM sales JOIN products ON (sales.product_id = product.id and sales.location = product.place_of_production)
  WHERE product.category = 'Cutlery';
Copy

예: 포인트 조회 필터와 조인 조건자를 사용하는 쿼리

일반적인 포인트 조회 필터와 조인 조건자를 모두 사용하는 쿼리에서는 검색 최적화 서비스로 둘 모두의 성능을 개선할 수 있습니다. 다음 쿼리에서 검색 최적화 서비스는 sales.location point-lookup 조건자뿐만 아니라 product_id join 조건자도 개선할 수 있습니다.

SELECT sales.date, product.name
  FROM sales JOIN products ON (sales.product_id = product.id)
  WHERE product.category = 'Cutlery'
  AND sales.location = 'Buenos Aires';
Copy

제한 사항

검색 최적화 서비스 및 조인 쿼리에는 다음과 같은 제한 사항이 적용됩니다.

  • 조인 조건자의 분리(OR)는 현재 지원되지 않습니다.

  • LIKE, ILIKE, RLIKE 조인 조건자는 현재 지원되지 않습니다.

  • VARIANT 열의 조인 조건자는 현재 지원되지 않습니다.

  • EQUAL_NULL 비교 조건자는 현재 지원되지 않습니다.

  • 현재 검색 최적화 서비스의 제한 사항 은 조인 쿼리에도 적용됩니다.