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 :
Requêtes sélectives de recherche de points sur des tables. Une requête de recherche ponctuelle renvoie uniquement une ligne ou un petit nombre de lignes distinctes. Les exemples de cas d’utilisation incluent :
Utilisateurs professionnels qui ont besoin de temps de réponse rapides pour les tableaux de bord critiques avec des filtres hautement sélectifs.
Scientifiques de données qui explorent de grands volumes de données et recherchent des sous-ensembles spécifiques de données.
Applications de données récupérant un petit ensemble de résultats sur la base d’un ensemble étendu de prédicats de filtrage.
Pour plus d’informations, consultez Accélérer les requêtes de recherche de points grâce à l’optimisation de la recherche.
Recherche de données de caractère (texte) et d’adresses IP exécutées avec les fonctions SEARCH et SEARCH_IP. Pour plus d’informations, voir Accélérer les requêtes de texte grâce à l’optimisation de la recherche.
Recherches de sous-chaînes et d’expressions régulières (par exemple, LIKE, ILIKE, RLIKE, et ainsi de suite). Pour plus d’informations, voir Accélérer les requêtes par sous-chaîne et expression régulière grâce à l’optimisation de la recherche.
Requêtes sur les éléments des colonnes VARIANT, OBJECT et ARRAY (semi-structurés) qui utilisent les types de prédicats suivants :
Prédicats d’égalité.
Prédicats IN.
Prédicats qui utilisent ARRAY_CONTAINS.
Prédicats qui utilisent ARRAYS_OVERLAP.
Prédicats qui utilisent la recherche en texte intégral avec SEARCH.
Sous-chaînes et prédicats d’expressions régulières
Prédicats qui recherchent la présence de valeurs NULL.
Pour plus d’informations, consultez Accélérer les requêtes de données semi-structurées grâce à l’optimisation de la recherche.
Requêtes qui utilisent des fonctions géospatiales sélectionnées avec des valeurs GEOGRAPHY. Pour plus d’informations, consultez Accélérer les requêtes géospatiales grâce à l’optimisation de la recherche.
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);
Ajoutez la propriété SEARCH OPTIMIZATION à la table à l’aide de ALTER TABLE :
ALTER TABLE test_table ADD SEARCH OPTIMIZATION;
Les requêtes suivantes peuvent utiliser le service d’optimisation de la recherche :
SELECT * FROM test_table WHERE id = 2;
SELECT * FROM test_table WHERE c2 = '1';
SELECT * FROM test_table WHERE c3 = '1985-05-11';
SELECT * FROM test_table WHERE c1 IS NULL;
SELECT * FROM test_table WHERE c1 = 4 AND c3 = '1996-12-20';
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;
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;
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;
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;
DELETE et UPDATE (et MERGE) peuvent également utiliser le service d’optimisation de la recherche :
DELETE FROM test_table WHERE id = 3;
UPDATE test_table SET c1 = 99 WHERE id = 4;