검색 최적화의 이점을 활용할 수 있는 쿼리 식별하기

검색 최적화로 많은 쿼리의 성능을 개선할 수 있습니다. 이 항목에서는 검색 최적화가 가장 도움이 되는 쿼리 종류의 특성과 그와는 반대로 이익이 되지 않는 쿼리 종류에 대해 설명합니다.

일반 쿼리 특성

검색 최적화는 다음과 같은 특성을 가진 쿼리의 성능을 향상하는 데 매우 적합합니다.

  • 기본 클러스터 키 이외의 열이 포함된 쿼리.

  • (검색 최적화를 적용하기 전에) 일반적으로 몇 초 이상 실행되는 쿼리. 대부분의 경우 실행 시간이 1초 미만인 쿼리의 성능은 검색 최적화로도 크게 향상되지 않습니다.

  • 쿼리 필터 작업으로 액세스한 열 중 하나 이상에 대략 100,000개 정도 이상의 고유한 값이 있습니다.

    고유 값의 수를 결정하려면, 다음 중 하나를 사용할 수 있습니다.

    • APPROX_COUNT_DISTINCT 를 사용하여 고유 값의 대략적인 수를 구합니다.

      SELECT APPROX_COUNT_DISTINCT(column1) FROM table1;
      
      Copy
    • COUNT(DISTINCT <열_이름>) 을 사용하여 실제 고유 값 수를 구합니다.

      SELECT COUNT(DISTINCT c1), COUNT(DISTINCT c2) FROM test_table;
      
      Copy

    대략적인 고유 값 수만 필요하므로, APPROX_COUNT_DISTINCT 를 사용하는 것이 좋습니다. 일반적으로 COUNT(DISTINCT <열_이름>) 에 비해 속도가 빠르고 비용이 적게 발생합니다.

지원되는 데이터 타입

현재 검색 최적화 서비스는 다음과 같은 데이터 타입을 지원합니다.

다른 데이터 타입의 다른 값을 포함하는 쿼리(예: FLOAT, DECFLOAT 또는 GEOMETRY)에는 이점이 없습니다.

지원되는 테이블 유형

현재 검색 최적화 서비스는 다음과 같은 테이블 유형을 지원합니다.

현재 검색 최적화 서비스는 다음과 같은 테이블 유형을 지원하지 않습니다.

지원되는 조건자 유형

검색 최적화는 다음과 같은 종류의 조건자를 사용하여 쿼리 성능을 개선할 수 있습니다.

데이터 정렬 지원

검색 최적화는 검색 방법에 따라 COLLATE 절 로 정의된 열에 대한 쿼리 성능을 향상시킬 수 있습니다.

  • EQUALITY 검색 방법을 사용하는 열에서 검색 최적화가 활성화된 경우 모든 데이터 정렬 사양이 지원됩니다.

  • FULL_TEXT 또는 SUBSTRING 검색 방법을 사용하는 열에서 검색 최적화가 활성화된 경우 'utf8' 또는 'bin' 데이터 정렬 사양이 지원됩니다.

검색 방법에 대한 자세한 내용은 ALTER TABLE … ADD SEARCH OPTIMIZATION 을 참조하십시오.

검색 최적화는 COLLATE 함수를 사용하여 열의 데이터 정렬 사양을 변경하는 조건자를 지원하지 않습니다.

예를 들어, 데이터 정렬 사양이 있는 열이 있는 테이블을 생성하고 행을 삽입합니다.

CREATE OR REPLACE TABLE search_optimization_collation_demo (
  en_ci_col VARCHAR COLLATE 'en-ci',
  utf_8_col VARCHAR COLLATE 'utf8');

INSERT INTO search_optimization_collation_demo VALUES (
  'test_collation_1',
  'test_collation_2');
Copy

테이블의 두 열 모두에서 동일 조건자에 대한 검색 최적화를 사용하도록 설정합니다.

ALTER TABLE search_optimization_collation_demo
  ADD SEARCH OPTIMIZATION ON EQUALITY(en_ci_col, utf_8_col);
Copy

다음 쿼리는 검색 최적화의 이점을 누릴 수 있습니다.

SELECT *
  FROM search_optimization_collation_demo
  WHERE utf_8_col = 'test_collation_2';
Copy

다음 쿼리는 COLLATE 함수를 사용하여 utf_8_col 열의 데이터 정렬 사양을 변경하므로 검색 최적화의 이점을 누릴 수 없습니다.

SELECT *
  FROM search_optimization_collation_demo
  WHERE utf_8_col COLLATE 'de-ci' = 'test_collation_2';
Copy

다음 쿼리도 검색 최적화의 혜택을 받을 수 없습니다. 우선 순위의 데이터 정렬 규칙 을 기반으로 쿼리는 COLLATE 함수를 사용하여 'de-ci' 데이터 정렬 사양을 utf_8_col 열에 적용합니다.

SELECT *
  FROM search_optimization_collation_demo
  WHERE utf_8_col = 'test_collation_2' COLLATE 'de-ci';
Copy

Apache Iceberg™ 테이블 지원

검색 최적화를 통해 Apache Iceberg™ 테이블의 쿼리 성능을 개선할 수 있습니다. Iceberg 테이블에 대한 검색 최적화 구성에 대한 자세한 내용은 ALTER ICEBERG TABLE 섹션을 참조하십시오.

Iceberg 테이블에 대한 검색 최적화 지원에는 다음과 같은 제한 사항이 적용됩니다.

  • 반정형지리공간 데이터 타입 등 Iceberg 테이블이 지원하지 않는 데이터 타입이 있는 열에는 검색 최적화를 추가할 수 없습니다. 자세한 내용은 Apache Iceberg™ 테이블의 데이터 타입 섹션을 참조하십시오.

  • Apache Parquet™ 파일이 너무 큰 경우(예: 수백 메가바이트 압축) 일부 시나리오에서는 쿼리가 검색 최적화 서비스의 이점을 충분히 누리지 못할 수 있습니다.

Snowflake 테이블에 대한 검색 최적화에 적용되는 다른 제한 사항은 Iceberg 테이블에도 적용됩니다. 자세한 내용은 검색 최적화의 이점이 없는 쿼리 섹션을 참조하십시오.

뷰에 대한 잠재적 개선 사항

검색 최적화 서비스는 뷰(보안 뷰 포함)의 성능을 간접적으로 향상할 수 있습니다. 뷰의 기본 테이블에 검색 최적화가 활성화되어 있고 쿼리가 해당 테이블에 대해 선택적 조건자를 사용하는 경우 검색 최적화 서비스는 행을 필터링할 때 성능을 향상할 수 있습니다. 지원되는 조건자 유형 섹션을 참조하십시오.

뷰의 모든 테이블에서 검색 최적화가 활성화되지 않아도 됩니다. 검색 최적화는 각 테이블에서 독립적으로 수행됩니다.

검색 최적화의 이점이 없는 쿼리

현재 검색 최적화 서비스에서는 부동 소수점 데이터 타입, GEOMETRY 또는 아직 설명하지 않은 기타 데이터 타입을 지원하지 않습니다. Snowflake는 향후 더 많은 데이터 타입에 대한 지원을 추가할 수 있습니다.

또한 검색 최적화 서비스는 다음을 지원하지 않습니다.

  • 일부 테이블 유형.

    자세한 내용은 지원되는 테이블 유형 섹션을 참조하십시오.

  • 구체화된 뷰.

  • 열 연결.

  • 분석 식.

  • 테이블 열에 대한 캐스트(문자열로 캐스트되는 고정 소수점 숫자 제외).

    검색 최적화는 상수 값에 대한 암시적 및 명시적 캐스트가 포함된 조건자를 지원하지만, 실제 테이블 열의 값을 캐스팅하는 조건자는 지원하지 않습니다(INTEGER 및 NUMBER에서 VARCHAR로의 캐스트 제외).

    예를 들어, 다음 조건자는 상수 값(테이블 열의 값이 아님)에 대한 암시적 및 명시적 캐스트를 사용하므로 지원됩니다.

    -- Supported predicate
    -- (where the string '2020-01-01' is implicitly cast to a date)
    WHERE timestamp1 = '2020-01-01';
    
    -- Supported predicate
    -- (where the string '2020-01-01' is explicitly cast to a date)
    WHERE timestamp1 = '2020-01-01'::date;
    
    Copy

    다음 조건자는 테이블 열의 값에 대한 캐스트를 사용하므로 지원되지 않습니다.

    -- Unsupported predicate
    -- (where values in a VARCHAR column are cast to DATE)
    WHERE to_date(varchar_column) = '2020-01-01';
    
    Copy

    검색 최적화 서비스에서는 캐스트 이후의 값이 아닌 원래 열 값이 사용됩니다. 결과적으로, 이러한 조건자가 포함된 쿼리에서는 검색 최적화 서비스를 사용할 수 없습니다.

언급한 바와 같이, 이 규칙의 예외는 테이블 열에서 NUMBER 또는 INTEGER 값을 VARCHAR 값으로 캐스팅하는 것입니다. 검색 최적화 서비스에서 지원되는 조건자의 타입은 다음과 같습니다.

-- Supported predicate
-- (where values in a numeric column are cast to a string)
WHERE cast(numeric_column as varchar) = '2'
Copy

검색 최적화는 활성 데이터에서만 작동하므로 검색 최적화는 :doc:`Time Travel </user-guide/data-time-travel>`을 사용하는 쿼리의 성능을 향상하지 않습니다.