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);
Copy

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

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 colonnes c1,c2,c3 et la fonction recherche une, deux ou trois de ces colonnes (mais pas c4 ou c5), 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');
Copy
DESCRIBE SEARCH OPTIMIZATION ON lines;
Copy
+---------------+----------------------------+--------+------------------+--------+
| 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);
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  |
+---------------+----------------------------+--------+------------------+--------+

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;
Copy
+---------------+----------------------------+--------+------------------+--------+
| 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;
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   |
+---------------+----------------------------+--------+------------------+--------+

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(*);
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   |
+---------------+----------------------------+----------------+------------------+--------+

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);
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.