검색 최적화를 통해 텍스트 쿼리 속도 향상하기

검색 최적화를 통해 SEARCHSEARCH_IP 함수를 사용하는 쿼리의 성능을 개선할 수 있습니다. 이러한 쿼리는 VARIANT, OBJECT, ARRAY 열의 필드를 포함하여 하나 이상의 테이블에서 지정된 열에 있는 문자 데이터(텍스트) 및 IPv4 주소를 검색합니다.

참고

ALTER TABLE … ADD SEARCH OPTIMIZATION 명령에서 ON 절을 사용하여 특정 열에 대해 이 기능을 활성화해야 합니다. 예:

ALTER TABLE lines ADD SEARCH OPTIMIZATION
  ON FULL_TEXT(play, character, line);
Copy

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');
Copy
DESCRIBE SEARCH OPTIMIZATION ON lines;
Copy
+---------------+----------------------------+--------+------------------+--------+
| 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);
Copy
DESCRIBE SEARCH OPTIMIZATION ON lines;
Copy
+---------------+----------------------------+--------+------------------+--------+
| 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;
Copy
+---------------+----------------------------+--------+------------------+--------+
| 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;
Copy
+---------------+----------------------------+----------------+------------------+--------+
| 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;
Copy
DESCRIBE SEARCH OPTIMIZATION ON lines;
Copy
+---------------+----------------------------+--------+------------------+--------+
| 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(*);
Copy
DESCRIBE SEARCH OPTIMIZATION ON lines;
Copy
+---------------+----------------------------+----------------+------------------+--------+
| 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);
Copy
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.