Accélérer les requêtes de texte grâce à l’optimisation de la recherche¶
Le service d’optimisation de la recherche peut améliorer les performances des requêtes qui utilisent les fonctions SEARCH et SEARCH_IP. Ces requêtes recherchent des données de caractères (texte) et des adresses IPv4 dans des colonnes spécifiées à partir d’une ou plusieurs tables, y compris les champs dans les colonnes VARIANT, OBJECT et ARRAY.
Note
Vous devez activer cette fonctionnalité pour des colonnes spécifiques à l’aide de la clause ON dans la commande ALTER TABLE … ADD SEARCH OPTIMIZATION. Par exemple :
ALTER TABLE lines ADD SEARCH OPTIMIZATION
ON FULL_TEXT(play, character, line);
Les recherches de texte ne sont pas optimisées si vous omettez la clause ON.
Les sections suivantes fournissent plus de détails :
Conditions d’utilisation de l’exécution de l’optimisation de la recherche FULL_TEXT
Exemples d’optimisation de la recherche ADD (et DROP) FULL_TEXT
Conditions d’utilisation de l’exécution de l’optimisation de la recherche FULL_TEXT¶
Après avoir activé l’optimisation de la recherche FULL_TEXT sur une table interrogée avec la fonction SEARCH, le chemin d’accès de recherche pour l’optimisation peut être utilisé lors de la planification et de l’exécution de la requête. Les conditions suivantes doivent être remplies :
L’optimisation de la recherche doit être prête à l’emploi (
active
colonne = TRUE dans la sortie DESCRIBE SEARCH OPTIMIZATION).L’optimisation de la recherche doit être activée sur un sur-ensemble des colonnes spécifiées dans le prédicat SEARCH. Par exemple, si une table contient VARCHAR les colonnes
c1,c2,c3,c4,c5
, l’optimisation de la recherche couvre les colonnesc1,c2,c3
et la fonction recherche une, deux ou trois de ces colonnes (mais pasc4
ouc5
), la requête peut bénéficier de l’optimisation de la recherche FULL_TEXT.L’analyseur défini pour l’optimisation de la recherche dans la commande ALTER TABLE doit être le même que l’analyseur spécifié dans l’appel de fonction SEARCH.
Astuce
Pour savoir si un chemin d’accès de recherche spécifique a été utilisé pour une requête, recherchez un nœud Search Optimization Access
dans le profil de la requête.
Exemples d’optimisation de la recherche ADD (et DROP) FULL_TEXT¶
Les exemples suivants montrent comment activer l’optimisation de la recherche FULL_TEXT sur les colonnes d’une table pour améliorer les performances des requêtes lorsque la fonction SEARCH est utilisée pour interroger ces colonnes.
Activer l’optimisation de la recherche FULL_TEXT avec un analyseur spécifique¶
L’exemple suivant active l’optimisation de la recherche FULL_TEXT sur une colonne et spécifie un analyseur. La combinaison du type d’optimisation et de l’analyseur (method
) se reflète dans la sortie 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 |
+---------------+----------------------------+--------+------------------+--------+
Si vous activez l’optimisation de la recherche FULL_TEXT sur la même colonne avec l’analyseur par défaut, la sortie DESCRIBE renvoie deux lignes et différencie les deux entrées par l” ID de l’expression et la méthode.
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 |
+---------------+----------------------------+--------+------------------+--------+
Activer l’optimisation de la recherche FULL_TEXT sur une colonne VARIANT¶
La commande suivante active l” optimisation de la recherche FULL_TEXT sur une colonne VARIANT. (Cette table car_sales
et ses données sont décrits sous Interrogation de données semi-structurées.)
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 |
+---------------+----------------------------+--------+------------------+--------+
Supprimer l’optimisation FULL_TEXT d’une ou plusieurs colonnes¶
Vous pouvez activer l’optimisation FULL_TEXT sur plusieurs colonnes, puis supprimer ultérieurement l’optimisation d’une ou plusieurs de ces colonnes. Les colonnes restantes sont toujours optimisées.
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 |
+---------------+----------------------------+--------+------------------+--------+
Utiliser le caractère générique (*) pour activer l’optimisation de la recherche sur toutes les colonnes éligibles¶
La commande ALTER TABLE suivante active l’optimisation de la recherche FULL_TEXT sur les quatre colonnes VARCHAR dans la table 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 |
+---------------+----------------------------+----------------+------------------+--------+
Erreur attendue lors de l’activation de l’optimisation FULL_TEXT¶
La commande ALTER TABLE suivante échoue avec une erreur attendue car l’une des colonnes spécifiées est une colonne 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.