Aceleração de consultas de texto com otimização de pesquisa¶
A otimização de pesquisa pode melhorar o desempenho de consultas que usam as funções SEARCH e SEARCH_IP. Essas consultas pesquisam dados de caractere (texto) e endereços IPv4 em colunas especificadas de uma ou mais tabelas, incluindo campos nas colunas VARIANT, OBJECT e ARRAY.
Nota
Você deve habilitar este recurso para colunas específicas usando a cláusula ON no comando ALTER TABLE … ADD SEARCH OPTIMIZATION. Por exemplo:
ALTER TABLE lines ADD SEARCH OPTIMIZATION
ON FULL_TEXT(play, character, line);
As pesquisas de texto não serão otimizadas se você omitir a cláusula ON.
As seções seguintes fornecem mais detalhes:
Condições para uso em tempo de execução da otimização de pesquisa de FULL_TEXT
Exemplos de otimização de pesquisa de ADD (e DROP) FULL_TEXT
Condições para uso em tempo de execução da otimização de pesquisa de FULL_TEXT¶
Depois de habilitar a otimização de pesquisa FULL_TEXT em uma tabela que é consultada com a função SEARCH, o caminho de acesso de pesquisa para a otimização pode ser usado durante o planejamento e a execução da consulta. As seguintes condições devem ser atendidas:
A otimização de pesquisa deve estar pronta para uso (coluna
active
= TRUE na saída DESCRIBESEARCHOPTIMIZATION).A otimização de pesquisa deve ser habilitada em um superconjunto das colunas especificadas no predicado SEARCH. Por exemplo, se uma tabela contiver colunas VARCHAR
c1,c2,c3,c4,c5
, a otimização de pesquisa abrange colunasc1,c2,c3
e a função pesquisa uma, duas ou três dessas colunas (mas nãoc4
ouc5
), a consulta pode se beneficiar da otimização de pesquisa FULL_TEXT.O analisador definido para a otimização de pesquisa no comando ALTER TABLE deve ser o mesmo que o analisador especificado na chamada de função SEARCH.
Dica
Para descobrir se um caminho de acesso de pesquisa específico foi usado para uma consulta, procure um nó Search Optimization Access
no perfil de consulta.
Exemplos de otimização de pesquisa de ADD (e DROP) FULL_TEXT¶
Os exemplos a seguir mostram como habilitar a otimização de pesquisa FULL_TEXT em colunas em uma tabela para melhorar o desempenho da consulta quando a função SEARCH é usada para consulta essas colunas.
Habilitação da otimização de pesquisa FULL_TEXT com um analisador específico¶
O exemplo a seguir habilita a otimização de pesquisa FULL_TEXT em uma coluna e especifica um analisador. A combinação do tipo de otimização e do analisador (method
) é refletida na saída 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 |
+---------------+----------------------------+--------+------------------+--------+
Se você habilitar a otimização de pesquisa FULL_TEXT na mesma coluna com o analisador padrão, a saída DESCRIBE retornará duas linhas e diferenciará as duas entradas por ID da expressão e método.
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 |
+---------------+----------------------------+--------+------------------+--------+
Habilitação da otimização de pesquisa FULL_TEXT em uma coluna VARIANT¶
O comando a seguir habilita a otimização de pesquisa FULL_TEXT em uma coluna VARIANT. (Esta tabela car_sales
e seus dados são descritos em Consulta de dados semiestruturados.)
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 |
+---------------+----------------------------+--------+------------------+--------+
Descarte da otimização FULL_TEXT de uma ou mais colunas¶
Você pode habilitar a otimização FULL_TEXT em várias colunas e depois remover a otimização de uma ou mais dessas colunas. As colunas restantes ainda estão otimizadas.
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 |
+---------------+----------------------------+--------+------------------+--------+
Use o curinga (*) para habilitar a otimização de pesquisa em todas as colunas qualificadas¶
O comando ALTER TABLE a seguir habilita a otimização de pesquisa FULL_TEXT em todas as quatro colunas VARCHAR da tabela lines
:
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 |
+---------------+----------------------------+----------------+------------------+--------+
Erro esperado ao habilitar a otimização FULL_TEXT¶
O comando ALTER TABLE a seguir falha com um erro esperado porque uma das colunas especificadas é uma coluna NUMBER:
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.