검색 최적화 활성화 및 비활성화
검색 최적화 활성화 및 비활성화
검색 최적화를 활성화하려면 필요한 권한을 가진 역할을 사용한 다음, ALTER TABLE … ADD SEARCH OPTIMIZATION 명령으로 전체 테이블 또는 특정 열에 대해 활성화하세요.
출처: Snowflake 문서
본문
필요한 액세스 제어 권한
테이블에 대해 검색 최적화를 추가, 구성, 제거하려면 다음을 수행해야 합니다.
- 테이블에 대한 OWNERSHIP 권한을 가져야 합니다.
- 테이블이 들어 있는 스키마에 대한 ADD SEARCH OPTIMIZATION 권한을 가져야 합니다. 이 권한을 부여하려면:
GRANT ADD SEARCH OPTIMIZATION ON SCHEMA <schema_name> TO ROLE <role_name>
쿼리에 대해 검색 최적화 서비스를 사용하려면 테이블에 대한 SELECT 권한만 있으면 됩니다.
추가 권한은 필요하지 않습니다. SEARCH OPTIMIZATION은 테이블 속성이므로, 테이블을 쿼리할 때 자동으로 감지되어 (적절하다면) 사용됩니다.
검색 최적화 구성
참고
대규모 테이블(테라바이트(TB) 이상의 데이터를 포함하는 테이블)에 검색 최적화를 추가하면 짧은 기간 동안 크레딧 소모가 즉시 증가할 수 있습니다.
테이블에 검색 최적화를 추가하면 유지 관리 서비스가 즉시 백그라운드에서 테이블의 검색 액세스 경로를 구축하기 시작합니다. 테이블이 크다면 유지 관리 서비스가 이 작업을 대규모로 병렬화할 수 있으며, 이로 인해 짧은 기간 동안 비용이 증가할 수 있습니다.
대규모 테이블에 검색 최적화를 추가하기 전에 이 비용의 추정치를 얻어 무엇을 기대해야 하는지 알 수 있도록 하세요.
검색 최적화를 활성화할 때는 전체 테이블에 대해 활성화하거나 테이블의 특정 열에 대해 활성화하는 선택지가 있습니다.
- 전체 테이블에 대해 검색 최적화를 활성화하면 모든 적격 열에서 포인트 조회 쿼리에 대해 활성화됩니다. 전체 테이블에 대해 검색 최적화를 활성화하려면 ON 절 없이 ALTER TABLE … ADD SEARCH OPTIMIZATION 명령을 사용하세요.
- 특정 열에 대해 검색 최적화를 활성화하면 쿼리에서 자주 사용하지 않는 열에 대한 검색 액세스 경로 생성에 크레딧을 쓰지 않아도 되고, 또한 각 열에 대해 최적화할 추가 유형의 쿼리를 선택해 잠재적으로 성능을 더 향상시킬 수 있습니다. 특정 열에 대해 검색 최적화를 활성화하고 최적화할 쿼리 유형을 지정하려면 ALTER TABLE … ADD SEARCH OPTIMIZATION 명령의 ON 절 을 사용하세요. ADD SEARCH OPTIMIZATION의 ON 절에서 검색 최적화를 위해 활성화할 열을 지정합니다. 주어진 열에 대해 검색 최적화를 활성화할 때 검색 방법(예: 동등성/IN 검색의 EQUALITY, GEOGRAPHY 검색의 GEO, 부분 문자열 검색의 SUBSTRING)도 지정할 수 있습니다. 같은 열에 여러 검색 방법을 활성화할 수 있습니다.
- ALTER ICEBERG TABLE … ADD SEARCH OPTIMIZATION 명령을 사용해 전체 Apache Iceberg™ 테이블 또는 테이블의 특정 열에 대해 검색 최적화를 활성화할 수 있습니다.
일반적으로 특정 열에 대해서만 검색 최적화를 활성화하는 것이 모범 사례입니다.
다음 섹션은 테이블에 대한 검색 최적화를 구성하는 방법을 설명합니다.
검색 최적화를 구성한 후에는 구성을 검사해 올바른지 확인할 수 있습니다.
검색 최적화가 충분한 이점을 제공하지 않는다는 것을 발견했을 때 특정 열 또는 전체 테이블에서 검색 최적화를 제거할 수 있습니다.
특정 열에 대한 검색 최적화 활성화
특정 열에 대한 검색 최적화를 구성하려면 ON 절과 함께 ALTER TABLE … ADD SEARCH OPTIMIZATION 명령을 사용하세요.
참고
이 명령을 실행할 때는 테이블에 검색 최적화를 추가할 권한 을 가진 역할을 사용하세요.
ON 절은 특정 열에 대해 검색 최적화를 구성하려 함을 지정합니다. 구문에 대한 자세한 내용은 ALTER TABLE … ADD SEARCH OPTIMIZATION에 대한 섹션 을 참고하세요.
참고
테이블의 모든 적용 가능한 열에 동등성 및 IN 조건부에 대한 검색 최적화를 적용하려면 전체 테이블에 대한 검색 최적화 활성화 를 참고하세요.
이 명령을 실행한 후 열이 검색 최적화로 구성되었는지 검증 할 수 있습니다.
다음 섹션은 검색 최적화 구성을 지정하는 방법을 보여주는 예시를 포함합니다.
- 예시: 특정 열에 대한 전체 텍스트 검색 최적화
- 예시: 특정 열에 대한 동등성 및 IN 조건부 지원
- 예시: 모든 적용 가능한 열에 대한 동등성 및 IN 조건부 지원
- 예시: 다양한 유형의 조건부 지원
- 예시: 같은 열에 대한 다양한 조건부 지원
- 예시: VARIANT의 요소에 대한 동등성 및 IN 조건부 지원
- 예시: 지리공간 함수 지원
예시: 특정 열에 대한 전체 텍스트 검색 최적화
SEARCH 및 SEARCH_IP 함수를 사용해 텍스트 검색을 수행할 수 있습니다. 이러한 함수가 사용될 때 쿼리 실행 성능을 향상시키려면 FULL_TEXT 검색 최적화를 활성화하세요. 테이블 열의 다양한 하위 집합과 다양한 텍스트 분석기(analyzer)를 사용해 테이블에 FULL_TEXT 검색 최적화를 활성화할 수 있습니다. 다양한 분석기의 동작에 대한 정보는 검색어가 토큰화되는 방식 을 참고하세요.
다음 구문을 사용해 테이블의 열 집합에 FULL_TEXT 검색 최적화를 활성화하세요.
ALTER TABLE <name> ADD SEARCH OPTIMIZATION
ON FULL_TEXT( { * | <col1> [ , <col2>, ... ] } [ , ANALYZER => '<analyzer_name>' ]);
지정하는 열은 VARCHAR, VARIANT, ARRAY, 또는 OBJECT 열이어야 합니다. 다른 데이터 타입의 열은 지원되지 않습니다. 또한 VARIANT, ARRAY, OBJECT 타입의 열에 대한 개별 경로(paths) 를 지정할 수 있습니다.
열 목록 대신 와일드카드 별표 문자(*)를 지정할 수 있습니다. 이 경우 지원되는 타입의 모든 열에 최적화가 자동으로 활성화됩니다.
지정된다면 ANALYZER => 'analyzer_name' 인자는 SEARCH 함수에 대해 문서화된 선택 항목 중 하나여야 합니다. 분석기를 지정하지 않으면 DEFAULT_ANALYZER가 사용됩니다.
참고
SEARCH 함수를 사용한 쿼리 실행이 최적화되려면 ALTER TABLE 명령의 검색 최적화에 지정된 분석기가 SEARCH 함수 호출에 지정된 분석기와 동일해야 합니다. 분석기가 일치하지 않으면 검색 액세스 경로가 선택되지 않습니다.
이 예시는 SEARCH 쿼리의 대상이 될 수 있는 세 개의 VARCHAR 열에 FULL_TEXT 검색 최적화를 활성화합니다.
ALTER TABLE lines ADD SEARCH OPTIMIZATION
ON FULL_TEXT(play, character, line);
이 테이블의 검색 최적화 구성을 설명하려면 다음 명령을 실행하세요.
DESCRIBE SEARCH OPTIMIZATION ON lines;
+---------------+----------------------------+-----------+------------------+--------+
| expression_id | method | target | target_data_type | active |
|---------------+----------------------------+-----------+------------------+--------|
| 1 | FULL_TEXT DEFAULT_ANALYZER | PLAY | VARCHAR(50) | true |
| 2 | FULL_TEXT DEFAULT_ANALYZER | CHARACTER | VARCHAR(30) | true |
| 3 | FULL_TEXT DEFAULT_ANALYZER | LINE | VARCHAR(2000) | true |
+---------------+----------------------------+-----------+------------------+--------+
자세한 내용은 테이블의 검색 최적화 구성 표시 를 참고하세요.
이 예시는 SEARCH_IP 쿼리의 대상이 될 수 있는 VARCHAR 열에 FULL_TEXT 검색 최적화를 활성화합니다.
ALTER TABLE ipt ADD SEARCH OPTIMIZATION ON FULL_TEXT(ip1, ANALYZER => 'ENTITY_ANALYZER');
검색 최적화 구성을 제거하려면 다음 명령 중 하나를 실행하세요.
ALTER TABLE lines DROP SEARCH OPTIMIZATION
ON FULL_TEXT(play, character, line);
ALTER TABLE lines DROP SEARCH OPTIMIZATION
ON play, character, line;
ALTER TABLE lines DROP SEARCH OPTIMIZATION
ON 1, 2, 3;
세 번째 ALTER TABLE … DROP SEARCH OPTIMIZATION 명령에서 1, 2, 3은 DESCRIBE 명령이 반환한 표현식 ID를 가리킵니다.
열의 하위 집합(이름 또는 표현식 ID로)을 드롭해 FULL_TEXT 검색 최적화 구성을 수정할 수도 있습니다. 자세한 내용은 특정 열 또는 전체 테이블에서 검색 최적화 제거 를 참고하세요.
FULL_TEXT 검색 최적화를 활성화하고 드롭하는 더 많은 예시는 ADD (및 DROP) FULL_TEXT 검색 최적화 예시 를 참고하세요.
예시: 특정 열에 대한 동등성 및 IN 조건부 지원
테이블 t1의 열 c1, c2, c3에 대해 동등성 조건부로 검색을 최적화하려면 다음 문을 실행하세요.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3);
ON 절에서 같은 검색 방법을 두 번 이상 지정할 수도 있습니다.
-- This statement is equivalent to the previous statement.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
예시: 모든 적용 가능한 열에 대한 동등성 및 IN 조건부 지원
테이블의 모든 적용 가능한 열에 대해 동등성 조건부로 검색을 최적화하려면 다음 문을 실행하세요.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(*);
다음 사항에 유의하세요.
- 검색 방법과 대상 구문의 설명 에 설명된 대로, 주어진 방법에 대해 별표와 특정 열을 동시에 지정할 수 없습니다.
- ON 절을 생략하는 것도 테이블의 모든 적용 가능한 열에 동등성 및 IN 조건부에 대한 검색 최적화를 구성하지만, ON 절을 지정하는 것과 생략하는 것 사이에는 차이가 있습니다. 전체 테이블에 대한 검색 최적화 활성화 를 참고하세요.
예시: 다양한 유형의 조건부 지원
열 c1과 c2에 대한 동등성 조건부와 열 c3에 대한 부분 문자열 검색을 최적화하려면 다음 문을 실행하세요.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2), SUBSTRING(c3);
예시: 같은 열에 대한 다양한 조건부 지원
같은 열 c1에서 동등성 조건부와 부분 문자열 조건부 모두에 대한 검색을 최적화하려면 다음 문을 실행하세요.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), SUBSTRING(c1);
예시: VARIANT의 요소에 대한 동등성 및 IN 조건부 지원
VARIANT 열 c4의 요소 user에 중첩된 VARIANT 요소 uuid에 대해 동등성 조건부로 검색을 최적화하려면 다음 문을 실행하세요.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c4:user.uuid);
예시: 지리공간 함수 지원
c1 열의 GEOGRAPHY 객체와 함께 지리공간 함수를 사용하는 조건부로 검색을 최적화하려면 다음 문을 실행하세요.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON GEO(c1);
전체 테이블에 대한 검색 최적화 활성화
지원되는 데이터 타입의 모든 열(반정형 및 GEOGRAPHY 제외)에 대해 EQUALITY를 지정하려면 ON 절 없이 ALTER TABLE … ADD SEARCH OPTIMIZATION 명령을 사용하세요.
참고
이 명령을 실행할 때는 테이블에 검색 최적화를 추가할 권한 을 가진 역할을 사용하세요.
예를 들어:
ALTER TABLE test_table ADD SEARCH OPTIMIZATION;
구문에 대한 자세한 내용은 ALTER TABLE의 검색 최적화에 대한 섹션 을 참고하세요.
이 명령을 실행한 후 열이 검색 최적화로 구성되었는지 검증 할 수 있습니다.
이후에 추가되는 열에 대한 영향
ON 절 없이 ALTER TABLE … ADD SEARCH OPTIMIZATION 명령을 실행한 후 테이블에 이후 추가되는 모든 열도 EQUALITY에 대한 최적화로 구성됩니다.
그러나 같은 테이블에서 ON 절과 함께 ALTER TABLE … { ADD | DROP } SEARCH OPTIMIZATION을 실행하면, 이후 테이블에 추가되는 열은 자동으로 EQUALITY로 구성되지 않습니다. 새로 추가된 열을 EQUALITY로 구성하려면 ALTER TABLE … ADD SEARCH OPTIMIZATION ON …을 실행해야 합니다.
테이블이 검색 최적화로 구성되었는지 검증
테이블과 그 열이 검색 최적화로 구성되었는지 검증하려면:
- 테이블과 그 열에 대한 검색 최적화 구성을 표시 합니다.
- SHOW TABLES 명령을 실행해 검색 최적화가 추가되었는지와 테이블의 얼마나 많은 부분이 최적화되었는지 확인합니다. 예를 들어:
SHOW TABLES LIKE '%test_table%';
이 명령의 출력에서:
SEARCH_OPTIMIZATION이 ON인지 검증하세요. 이것은 검색 최적화가 추가되었음을 나타냅니다.
- SEARCH_OPTIMIZATION_PROGRESS 값을 확인하세요. 이것은 지금까지 최적화된 테이블의 백분율을 지정합니다. 테이블에 검색 최적화를 처음 추가하면 성능 이점이 즉시 나타나지 않습니다. 검색 최적화 서비스가 백그라운드에서 데이터를 채우기 시작합니다. 유지 관리가 테이블의 현재 상태를 따라잡을수록 이점이 점진적으로 나타납니다. 검색 최적화가 작동하는지 검증하는 쿼리를 실행하기 전에 이것이 테이블이 완전히 최적화되었음을 보여줄 때까지 기다리세요.
- 검색 최적화가 작동하는지 검증하는 쿼리를 실행합니다. Snowflake 옵티마이저는 특정 쿼리에 대해 검색 최적화 서비스를 언제 사용할지 자동으로 선택합니다. 사용자는 검색 최적화가 어떤 쿼리에 사용될지 제어할 수 없습니다. 검색 최적화 서비스가 최적화하도록 설계된 쿼리를 선택하세요. 검색 최적화로 혜택을 받을 수 있는 쿼리 식별 을 참고하세요.
- 웹 UI에서 이 쿼리의 쿼리 플랜을 보고 "Search Optimization Access" 쿼리 노드가 쿼리 플랜의 일부인지 검증하세요.
테이블의 검색 최적화 구성 표시
테이블의 검색 최적화 구성을 표시하려면 DESCRIBE SEARCH OPTIMIZATION 명령을 사용하세요.
예를 들어, 열에 대한 검색 최적화를 구성하기 위해 다음 문을 실행했다고 가정해 보세요:
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1);
DESCRIBE SEARCH OPTIMIZATION을 실행하면 다음 출력이 생성됩니다.
DESCRIBE SEARCH OPTIMIZATION ON t1;
+---------------+----------+--------+------------------+--------+
| expression_id | method | target | target_data_type | active |
+---------------+----------+--------+------------------+--------+
| 1 | EQUALITY | C1 | NUMBER(38,0) | true |
+---------------+----------+--------+------------------+--------+
특정 열 또는 전체 테이블에서 검색 최적화 제거
특정 열에 대한 검색 최적화 구성을 제거하거나, 전체 테이블에서 SEARCH OPTIMIZATION 속성을 제거할 수 있습니다.
특정 열에 대한 검색 최적화 드롭
특정 열에 대한 검색 최적화 구성을 드롭하려면 ON 절과 함께 ALTER TABLE … DROP SEARCH OPTIMIZATION 명령을 사용하세요.
예를 들어, DESCRIBE SEARCH OPTIMIZATION 명령을 실행하면 다음 표현식이 출력된다고 가정해 보세요:
DESCRIBE SEARCH OPTIMIZATION ON t1;
+---------------+-----------+-----------+-------------------+--------+
| expression_id | method | target | target_data_type | active |
+---------------+-----------+-----------+-------------------+--------+
| 1 | EQUALITY | C1 | NUMBER(38,0) | true |
| 2 | EQUALITY | C2 | VARCHAR(16777216) | true |
| 3 | EQUALITY | C4 | NUMBER(38,0) | true |
| 4 | EQUALITY | C5 | VARCHAR(16777216) | true |
| 5 | EQUALITY | V1 | VARIANT | true |
| 6 | SUBSTRING | C2 | VARCHAR(16777216) | true |
| 7 | SUBSTRING | C5 | VARCHAR(16777216) | true |
| 8 | GEO | G1 | GEOGRAPHY | true |
| 9 | EQUALITY | V1:"key1" | VARIANT | true |
| 10 | EQUALITY | V1:"key2" | VARIANT | true |
+---------------+-----------+-----------+-------------------+--------+
열 c2에 대한 부분 문자열 검색 최적화를 드롭하려면 다음 문을 실행하세요.
ALTER TABLE t1 DROP SEARCH OPTIMIZATION ON SUBSTRING(c2);
열 c5에 대한 모든 방법의 검색 최적화를 드롭하려면 다음 문을 실행하세요.
ALTER TABLE t1 DROP SEARCH OPTIMIZATION ON c5;
열 c5는 동등성과 부분 문자열 검색을 최적화하도록 구성되어 있으므로, 위 문은 c5의 동등성 및 부분 문자열 검색 구성을 드롭합니다.
열 c1에 대한 동등성 검색 최적화를 드롭하고 표현식 ID 6과 8이 지정한 구성을 드롭하려면 다음 문을 실행하세요.
ALTER TABLE t1 DROP SEARCH OPTIMIZATION ON EQUALITY(c1), 6, 8;
구문에 대한 자세한 내용은 ALTER TABLE … DROP SEARCH OPTIMIZATION에 대한 섹션 을 참고하세요.
테이블에서 검색 최적화 제거
테이블에서 SEARCH OPTIMIZATION 속성을 제거하려면:
- 테이블에서 검색 최적화를 제거할 권한 을 가진 역할로 전환합니다.
- ON 절 없이 ALTER TABLE … DROP SEARCH OPTIMIZATION 명령을 실행합니다.
ALTER TABLE [IF EXISTS] <table_name> DROP SEARCH OPTIMIZATION;
예를 들어:
ALTER TABLE test_table DROP SEARCH OPTIMIZATION;
자세한 내용은 ALTER TABLE … DROP SEARCH OPTIMIZATION에 대한 섹션 을 참고하세요.