검색 최적화의 이점을 활용할 수 있는 쿼리 식별하기¶
검색 최적화로 많은 쿼리의 성능을 개선할 수 있습니다. 이 항목에서는 검색 최적화가 가장 도움이 되는 쿼리 종류의 특성과 그와는 반대로 이익이 되지 않는 쿼리 종류에 대해 설명합니다.
일반 쿼리 특성¶
검색 최적화는 다음과 같은 특성을 가진 쿼리의 성능을 향상하는 데 매우 적합합니다.
기본 클러스터 키 이외의 열이 포함된 쿼리.
(검색 최적화를 적용하기 전에) 일반적으로 몇 초 이상 실행되는 쿼리. 대부분의 경우 실행 시간이 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)
Queries that involve other values of other data types (for example, FLOAT, DECFLOAT, or GEOMETRY) don’t benefit.
Supported table types¶
The search optimization service currently supports the following types of tables:
Standard Snowflake tables
The search optimization service currently doesn’t support the following types of tables:
지원되는 조건자 유형¶
검색 최적화는 다음과 같은 종류의 조건자를 사용하여 쿼리 성능을 개선할 수 있습니다.
데이터 정렬 지원¶
검색 최적화는 검색 방법에 따라 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 테이블에도 적용됩니다. 자세한 내용은 검색 최적화의 이점이 없는 쿼리 섹션을 참조하십시오.
뷰에 대한 잠재적 개선 사항¶
검색 최적화 서비스는 뷰(보안 뷰 포함)의 성능을 간접적으로 향상할 수 있습니다. 뷰의 기본 테이블에 검색 최적화가 활성화되어 있고 쿼리가 해당 테이블에 대해 선택적 조건자를 사용하는 경우 검색 최적화 서비스는 행을 필터링할 때 성능을 향상할 수 있습니다. 지원되는 조건자 유형 섹션을 참조하십시오.
뷰의 모든 테이블에서 검색 최적화가 활성화되지 않아도 됩니다. 검색 최적화는 각 테이블에서 독립적으로 수행됩니다.
검색 최적화의 이점이 없는 쿼리¶
Currently, the search optimization service doesn’t support floating point data types, GEOMETRY, or other data types not already discussed. Snowflake might add support for more data types in the future.
Additionally, the search optimization service doesn’t support the following:
Some table types.
For more information, see Supported table types.
구체화된 뷰.
열 연결.
분석 식.
테이블 열에 대한 캐스트(문자열로 캐스트되는 고정 소수점 숫자 제외).
Although search optimization supports predicates with implicit and explicit casts on constant values, it doesn’t support predicates that cast values in the actual table column (except for casts from INTEGER and NUMBER to 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'
Search optimization doesn’t improve performance of queries that use Time Travel because search optimization works only on active data.