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

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

일반 쿼리 특성

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

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

  • (검색 최적화를 적용하기 전에) 일반적으로 몇 초 이상 실행되는 쿼리. 대부분의 경우 실행 시간이 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 <열_이름>) 에 비해 속도가 빠르고 비용이 적게 발생합니다.

지원되는 데이터 타입

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

  • 고정 소수점 숫자(예: INTEGER, NUMERIC)

  • DATE, TIME, TIMESTAMP

  • VARCHAR.

  • BINARY.

  • VARIANT, OBJECT, ARRAY

  • GEOGRAPHY.

다른 유형의 값(즉, FLOAT, GEOMETRY)을 포함하는 쿼리는 이득을 보지 못합니다.

지원되는 조건자 유형

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

기타 잠재적 개선 사항

검색 최적화는 JOIN을 사용하는 뷰와 쿼리의 성능도 향상할 수 있습니다.

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

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

조인

검색 최적화 서비스는 조인의 성능을 직접적으로 향상하지 않습니다. 그러나 조인하기 전 어느 한 테이블의 행 필터링 성능을 향상할 수 있습니다. 지원되는 조건자 유형 에서 설명한 대로 테이블에 검색 최적화가 활성화되어 있고 조건자가 선택적일 때 이러한 개선이 이루어질 수 있습니다.

두 테이블 모두에서 검색 최적화를 활성화할 필요가 없습니다. 검색 최적화 사용 여부에 대한 결정은 각 테이블에서 독립적입니다.

검색 최적화의 이점을 얻지 못하는 쿼리

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

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

  • 외부 테이블.

  • 동적 테이블.

  • 구체화된 뷰.

  • COLLATE 절 을 사용하여 정의된 열.

  • 열 연결.

  • 분석 식.

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

    검색 최적화는 상수 값에 대한 암시적 및 명시적 캐스트가 포함된 조건자를 지원하지만, 실제 테이블 열의 값을 캐스트하는 조건자는 지원하지 않습니다(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

검색 최적화는 활성 데이터에서만 작동하므로 검색 최적화는 Time Travel 을 사용하는 쿼리의 성능을 향상하지 않습니다.