검색 최적화의 이점을 활용할 수 있는 쿼리 식별하기¶
검색 최적화로 많은 쿼리의 성능을 개선할 수 있습니다. 이 항목에서는 검색 최적화가 가장 도움이 되는 쿼리 종류의 특성과 그와는 반대로 이익이 되지 않는 쿼리 종류에 대해 설명합니다.
일반 쿼리 특성¶
검색 최적화는 다음과 같은 특성을 가진 쿼리의 성능을 향상하는 데 매우 적합합니다.
기본 클러스터 키 이외의 열이 포함된 쿼리.
(검색 최적화를 적용하기 전에) 일반적으로 몇 초 이상 실행되는 쿼리. 대부분의 경우 실행 시간이 1초 미만인 쿼리의 성능은 검색 최적화로도 크게 향상되지 않습니다.
쿼리 필터 작업으로 액세스한 열 중 하나 이상에 대략 100,000개 정도 이상의 고유한 값이 있습니다.
고유 값의 수를 결정하려면, 다음 중 하나를 사용할 수 있습니다.
APPROX_COUNT_DISTINCT
를 사용하여 고유 값의 대략적인 수를 구합니다.SELECT APPROX_COUNT_DISTINCT(column1) FROM table1;
COUNT(DISTINCT <열_이름>)
을 사용하여 실제 고유 값 수를 구합니다.SELECT COUNT(DISTINCT c1), COUNT(DISTINCT c2) FROM test_table;
대략적인 고유 값 수만 필요하므로,
APPROX_COUNT_DISTINCT
를 사용하는 것이 좋습니다. 일반적으로COUNT(DISTINCT <열_이름>)
에 비해 속도가 빠르고 비용이 적게 발생합니다.
지원되는 데이터 타입¶
현재 검색 최적화 서비스는 다음과 같은 데이터 타입을 지원합니다.
고정 소수점 숫자의 데이터 타입 (예: INTEGER 및 NUMERIC)
문자열 및 이진 데이터 타입 (예: VARCHAR 및 BINARY)
날짜 및 시간 데이터 타입 (예: DATE, TIME, TIMESTAMP)
반정형 데이터 타입 (예: VARIANT, OBJECT, ARRAY)
다른 데이터 타입의 다른 값을 포함하는 쿼리(예: FLOAT 또는 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');
테이블의 두 열 모두에서 동일 조건자에 대한 검색 최적화를 사용하도록 설정합니다.
ALTER TABLE search_optimization_collation_demo
ADD SEARCH OPTIMIZATION ON EQUALITY(en_ci_col, utf_8_col);
다음 쿼리는 검색 최적화의 이점을 누릴 수 있습니다.
SELECT *
FROM search_optimization_collation_demo
WHERE utf_8_col = 'test_collation_2';
다음 쿼리는 COLLATE 함수를 사용하여 utf_8_col
열의 데이터 정렬 사양을 변경하므로 검색 최적화의 이점을 누릴 수 없습니다.
SELECT *
FROM search_optimization_collation_demo
WHERE utf_8_col COLLATE 'de-ci' = 'test_collation_2';
다음 쿼리도 검색 최적화의 혜택을 받을 수 없습니다. 우선 순위의 데이터 정렬 규칙 을 기반으로 쿼리는 COLLATE 함수를 사용하여 'de-ci'
데이터 정렬 사양을 utf_8_col
열에 적용합니다.
SELECT *
FROM search_optimization_collation_demo
WHERE utf_8_col = 'test_collation_2' COLLATE 'de-ci';
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;
다음 조건자는 테이블 열의 값에 대한 캐스트를 사용하므로 지원되지 않습니다.
-- Unsupported predicate -- (where values in a VARCHAR column are cast to DATE) WHERE to_date(varchar_column) = '2020-01-01';
검색 최적화 서비스에서는 캐스트 이후의 값이 아닌 원래 열 값이 사용됩니다. 결과적으로, 이러한 조건자가 포함된 쿼리에서는 검색 최적화 서비스를 사용할 수 없습니다.
언급한 바와 같이, 이 규칙의 예외는 테이블 열에서 NUMBER 또는 INTEGER 값을 VARCHAR 값으로 캐스팅하는 것입니다. 검색 최적화 서비스에서 지원되는 조건자의 타입은 다음과 같습니다.
-- Supported predicate -- (where values in a numeric column are cast to a string) WHERE cast(numeric_column as varchar) = '2'
검색 최적화는 활성 데이터에서만 작동하므로 검색 최적화는 Time Travel 을 사용하는 쿼리의 성능을 향상하지 않습니다.