Service d’optimisation de la recherche

Le service d’optimisation de la recherche peut améliorer considérablement les performances de certains types de requêtes de recherche et d’analyse. Un ensemble étendu de prédicats de filtrage sont pris en charge (voir Identifier les requêtes qui peuvent bénéficier de l’optimisation de la recherche).

Note

Pour commencer avec un didacticiel qui compare le temps d’exécution avec et sans l’optimisation de la recherche, consultez Premiers pas avec l’optimisation de la recherche

Le service d’optimisation de la recherche vise à améliorer considérablement les performances de certains types de requêtes sur des tables, et notamment :

Une fois que vous avez identifié les requêtes qui peuvent bénéficier du service d’optimisation de la recherche, vous pouvez activer l’optimisation de la recherche pour les colonnes et les tables utilisées dans ces requêtes.

Le service d’optimisation de la recherche est généralement transparent pour les utilisateurs. Les requêtes fonctionnent de la même manière que sans optimisation de la recherche ; certaines sont simplement plus rapides. Cependant, l’optimisation de la recherche a des effets sur certaines autres opérations de la table. Pour plus d’informations, consultez Utilisation de tables optimisées pour la recherche.

Fonctionnement du service d’optimisation des recherches

Pour améliorer les performances des requêtes de recherche, le service d’optimisation de la recherche crée et maintient une structure de données persistante appelée chemin d’accès à la recherche. Le chemin d’accès à la recherche permet de savoir quelles valeurs des colonnes de la table peuvent être trouvées dans chacune de ses micro-partitions, ce qui permet d’ignorer certaines micro-partitions lors de l’analyse de la table.

Un service de maintenance est responsable de la création et de la maintenance du chemin d’accès de recherche :

  • Lorsque vous activez l’optimisation de la recherche, le service de maintenance crée et remplit le chemin d’accès à la recherche avec les données nécessaires pour effectuer les recherches.

    La construction du chemin d’accès à la recherche peut prendre beaucoup de temps, en fonction de la taille de la table. Le service de maintenance effectue ce travail en arrière-plan et ne bloque aucune opération sur la table. Les requêtes ne sont pas accélérées tant que le chemin d’accès à la recherche n’a pas été entièrement construit.

  • Lorsque les données de la table sont mises à jour (par exemple, en chargeant de nouveaux ensembles de données ou via des opérations DML), le service de maintenance met automatiquement à jour le chemin d’accès de recherche pour refléter les modifications apportées aux données.

    Si les requêtes sont exécutées alors que le chemin d’accès à la recherche est encore en cours de mise à jour, les requêtes peuvent s’exécuter plus lentement, mais elles renverront toujours des résultats corrects.

L’état d’avancement du service de maintenance de chaque table apparaît dans la colonne search_optimization_progress de la sortie de SHOW TABLES. Avant de mesurer l’amélioration des performances de l’optimisation de la recherche sur une table nouvellement optimisée, attendez que cette colonne montre que la table a été entièrement optimisée.

La maintenance des chemins d’accès à la recherche est transparente. Vous n’avez pas besoin de créer un entrepôt virtuel pour gérer le service de maintenance. Cependant, les ressources de stockage et de calcul de la maintenance ont un coût. Pour plus de détails sur les coûts, consultez Optimisation de la recherche - Estimation et gestion des coûts.

Autres possibilités d’optimisation des performances des requêtes

Le service d’optimisation de la recherche est l’un des nombreux moyens d’optimiser les performances des requêtes. La liste suivante montre d’autres techniques :

  • Accélération de requête.

  • La création d’une ou plusieurs vues matérialisées (en cluster ou non).

  • Clustering d’une table.

Pour plus d’informations, voir Optimisation des performances des requêtes.

Exemples

Commencez par créer une table avec des données :

CREATE OR REPLACE TABLE test_table (id INT, c1 INT, c2 STRING, c3 DATE) AS
  SELECT * FROM VALUES
    (1, 3, '4',  '1985-05-11'),
    (2, 4, '3',  '1996-12-20'),
    (3, 2, '1',  '1974-02-03'),
    (4, 1, '2',  '2004-03-09'),
    (5, NULL, NULL, NULL);
Copy

Ajoutez la propriété SEARCH OPTIMIZATION à la table à l’aide de ALTER TABLE :

ALTER TABLE test_table ADD SEARCH OPTIMIZATION;
Copy

Les requêtes suivantes peuvent utiliser le service d’optimisation de la recherche :

SELECT * FROM test_table WHERE id = 2;
Copy
SELECT * FROM test_table WHERE c2 = '1';
Copy
SELECT * FROM test_table WHERE c3 = '1985-05-11';
Copy
SELECT * FROM test_table WHERE c1 IS NULL;
Copy
SELECT * FROM test_table WHERE c1 = 4 AND c3 = '1996-12-20';
Copy

La requête suivante peut utiliser le service d’optimisation de la recherche car la conversion implicite se trouve sur la constante, pas sur la colonne :

SELECT * FROM test_table WHERE c2 = 2;
Copy

L’élément suivant ne peut pas utiliser le service d’optimisation de la recherche parce que la conversion se trouve dans la colonne de la table :

SELECT * FROM test_table WHERE CAST(c2 AS NUMBER) = 2;
Copy

Une clause IN est prise en charge par le service d’optimisation de la recherche :

SELECT id, c1, c2, c3
  FROM test_table
  WHERE id IN (2, 3)
  ORDER BY id;
Copy

Si les prédicats sont pris en charge individuellement par le service d’optimisation de la recherche, ils peuvent être joints par la conjonction AND et être toujours pris en charge par le service d’optimisation de la recherche :

SELECT id, c1, c2, c3
  FROM test_table
  WHERE c1 = 1
    AND c3 = TO_DATE('2004-03-09')
  ORDER BY id;
Copy

DELETE et UPDATE (et MERGE) peuvent également utiliser le service d’optimisation de la recherche :

DELETE FROM test_table WHERE id = 3;
Copy
UPDATE test_table SET c1 = 99 WHERE id = 4;
Copy