검색 최적화를 통해 텍스트 쿼리 속도 향상하기¶
검색 최적화를 통해 SEARCH 및 SEARCH_IP 함수를 사용하는 쿼리의 성능을 개선할 수 있습니다. 이러한 쿼리는 VARIANT, OBJECT, ARRAY 열의 필드를 포함하여 하나 이상의 테이블에서 지정된 열에 있는 문자 데이터(텍스트) 및 IPv4 주소를 검색합니다.
참고
ALTER TABLE … ADD SEARCH OPTIMIZATION 명령에서 ON 절을 사용하여 특정 열에 대해 이 기능을 활성화해야 합니다. 예:
ALTER TABLE lines ADD SEARCH OPTIMIZATION
ON FULL_TEXT(play, character, line);
ON 절을 생략하면 텍스트 검색이 최적화되지 않습니다.
다음 섹션에서 더 자세히 설명합니다.
FULL_TEXT 검색 최적화의 런타임 사용 조건¶
SEARCH 함수로 쿼리하는 테이블에서 FULL_TEXT 검색 최적화를 활성화한 후에는 쿼리 계획 및 실행 중에 최적화를 위한 검색 액세스 경로를 사용할 수 있습니다. 다음 조건을 충족해야 합니다.
검색 최적화를 사용할 준비(DESCRIBE SEARCH OPTIMIZATION 출력에서
active
열 = TRUE)가 되어 있어야 합니다.검색 최적화는 SEARCH 조건자에 지정된 열의 상위 집합에서 사용하도록 설정해야 합니다. 예를 들어, 테이블에 VARCHAR 열
c1,c2,c3,c4,c5
가 포함되어 있고 검색 최적화에c1,c2,c3
열이 포함되며 함수가 해당 열 중 1개, 2개 또는 3개를 검색하는 경우(c4
또는c5
제외) 쿼리는 FULL_TEXT 검색 최적화의 이점을 얻을 수 있습니다.ALTER TABLE 명령에서 검색 최적화를 위해 정의된 분석기는 SEARCH 함수 호출에 지정된 분석기와 동일해야 합니다.
팁
쿼리에 특정 검색 액세스 경로가 사용되었는지 확인하려면 쿼리 프로필에서 Search Optimization Access
노드를 찾습니다.
ADD(및 DROP) FULL_TEXT 검색 최적화의 예¶
다음 예제에서는 테이블의 열에서 FULL_TEXT 검색 최적화를 활성화하여 해당 열을 쿼리하는 데 SEARCH 함수를 사용할 때 쿼리 성능을 개선하는 방법을 보여 줍니다.
특정 분석기로 FULL_TEXT 검색 최적화 활성화하기¶
다음 예제는 1개의 열에서 FULL_TEXT 검색 최적화를 활성화하고 분석기를 지정합니다. 최적화 유형과 분석기(method
) 조합은 DESCRIBE 출력에 반영됩니다.
ALTER TABLE lines ADD SEARCH OPTIMIZATION
ON FULL_TEXT(line, ANALYZER => 'UNICODE_ANALYZER');
DESCRIBE SEARCH OPTIMIZATION ON lines;
+---------------+----------------------------+--------+------------------+--------+
| expression_id | method | target | target_data_type | active |
|---------------+----------------------------+--------+------------------+--------|
| 1 | FULL_TEXT UNICODE_ANALYZER | LINE | VARCHAR(2000) | true |
+---------------+----------------------------+--------+------------------+--------+
기본 분석기를 사용하여 동일한 열에서 FULL_TEXT 검색 최적화를 활성화하면 DESCRIBE 출력은 두 행을 반환하고 두 항목을 식 ID 및 메서드별로 구분합니다.
ALTER TABLE lines ADD SEARCH OPTIMIZATION
ON FULL_TEXT(line);
DESCRIBE SEARCH OPTIMIZATION ON lines;
+---------------+----------------------------+--------+------------------+--------+
| expression_id | method | target | target_data_type | active |
|---------------+----------------------------+--------+------------------+--------|
| 1 | FULL_TEXT UNICODE_ANALYZER | LINE | VARCHAR(2000) | true |
| 2 | FULL_TEXT DEFAULT_ANALYZER | LINE | VARCHAR(2000) | false |
+---------------+----------------------------+--------+------------------+--------+
VARIANT 열에서 FULL_TEXT 검색 최적화 활성화하기¶
다음 명령은 VARIANT 열에서 FULL_TEXT 검색 최적화를 활성화합니다. (이 car_sales
테이블과 해당 데이터는 반정형 데이터 쿼리하기 에 설명되어 있습니다.)
ALTER TABLE car_sales ADD SEARCH OPTIMIZATION
ON FULL_TEXT(src);
DESCRIBE SEARCH OPTIMIZATION ON car_sales;
+---------------+----------------------------+--------+------------------+--------+
| expression_id | method | target | target_data_type | active |
|---------------+----------------------------+--------+------------------+--------|
| 1 | FULL_TEXT DEFAULT_ANALYZER | SRC | VARIANT | true |
+---------------+----------------------------+--------+------------------+--------+
1개 이상의 열에서 FULL_TEXT 최적화 삭제¶
여러 열에서 FULL_TEXT 최적화를 활성화한 다음 나중에 해당 열 중 하나 이상의 열에서 최적화를 해제할 수 있습니다. 나머지 열은 계속 최적화 상태를 유지합니다.
ALTER TABLE lines ADD SEARCH OPTIMIZATION
ON FULL_TEXT(play, act_scene_line, character, line, ANALYZER => 'UNICODE_ANALYZER');
DESCRIBE SEARCH OPTIMIZATION ON lines;
+---------------+----------------------------+----------------+------------------+--------+
| expression_id | method | target | target_data_type | active |
|---------------+----------------------------+----------------+------------------+--------|
| 1 | FULL_TEXT UNICODE_ANALYZER | PLAY | VARCHAR(50) | true |
| 2 | FULL_TEXT UNICODE_ANALYZER | ACT_SCENE_LINE | VARCHAR(10) | true |
| 3 | FULL_TEXT UNICODE_ANALYZER | CHARACTER | VARCHAR(30) | true |
| 4 | FULL_TEXT UNICODE_ANALYZER | LINE | VARCHAR(2000) | true |
+---------------+----------------------------+----------------+------------------+--------+
ALTER TABLE lines DROP SEARCH OPTIMIZATION ON 1, 2, 3;
DESCRIBE SEARCH OPTIMIZATION ON lines;
+---------------+----------------------------+--------+------------------+--------+
| expression_id | method | target | target_data_type | active |
|---------------+----------------------------+--------+------------------+--------|
| 4 | FULL_TEXT UNICODE_ANALYZER | LINE | VARCHAR(2000) | true |
+---------------+----------------------------+--------+------------------+--------+
모든 적격 열에 대한 검색 최적화를 활성화하려면 와일드카드(*) 사용¶
다음 ALTER TABLE 명령은 lines
테이블의 4개 VARCHAR 열 모두에서 FULL_TEXT 검색 최적화를 활성화합니다.
ALTER TABLE lines ADD SEARCH OPTIMIZATION
ON FULL_TEXT(*);
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 | ACT_SCENE_LINE | VARCHAR(10) | true |
| 3 | FULL_TEXT DEFAULT_ANALYZER | CHARACTER | VARCHAR(30) | true |
| 4 | FULL_TEXT DEFAULT_ANALYZER | LINE | VARCHAR(2000) | true |
+---------------+----------------------------+----------------+------------------+--------+
FULL_TEXT 최적화를 활성화할 때 예상되는 오류¶
지정한 열 중 하나가 NUMBER 열이기 때문에 다음 ALTER TABLE 명령이 예상되는 오류와 함께 실패합니다.
ALTER TABLE lines ADD SEARCH OPTIMIZATION
ON FULL_TEXT(play, speech_num, act_scene_line, character, line);
001128 (42601): SQL compilation error: error line 1 at position 76
Expression FULL_TEXT(IDX_SRC_TABLE.SPEECH_NUM) cannot be used in search optimization.