Accélérer les requêtes par sous-chaîne et expression régulière grâce à l’optimisation de la recherche

Le service d’optimisation de la recherche peut améliorer les performances des requêtes dont les prédicats recherchent des sous-chaînes ou utilisent des expressions régulières dans du texte ou des données semi-structurées. Pour plus de détails sur le fonctionnement de la recherche par sous-chaîne avec des données semi-structurées, voir Accélérer les requêtes de données semi-structurées grâce à l’optimisation de la recherche.

Les sections suivantes fournissent de plus amples informations sur la prise en charge de l’optimisation de la recherche pour les requêtes par sous-chaîne et expression régulière :

Activer l’optimisation de la recherche pour les requêtes par sous-chaîne et par expression régulière

Pour améliorer les performances des requêtes par sous-chaîne et expression régulière dans une table, utilisez la clause ON SUBSTRING dans la commande ALTER TABLE … ADD SEARCH OPTIMIZATION pour des colonnes spécifiques.

Par exemple :

ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON SUBSTRING(mycol);
Copy

Pour plus d’informations, voir Activation et désactivation de l’optimisation de la recherche.

Prédicats pris en charge

Le service d’optimisation de la recherche peut améliorer la performance des requêtes avec des prédicats qui utilisent :

Le service d’optimisation de la recherche peut améliorer les performances lors de la recherche de sous-chaînes de cinq caractères ou plus. (Des sous-chaînes plus sélectives peuvent donner lieu à de meilleures performances). Le service d’optimisation de la recherche n’utilise pas les chemins d’accès de la recherche pour le prédicat suivant car la sous-chaîne est plus courte que cinq caractères :

LIKE '%TEST%'
Copy

Pour le prédicat suivant, le service d’optimisation de la recherche peut optimiser cette requête, en utilisant les chemins d’accès à la recherche pour rechercher les sous-chaînes de SEARCH et OPTIMIZED. Cependant, les chemins d’accès de recherche ne sont pas utilisés pour IS parce que la sous-chaîne est plus courte que cinq caractères.

LIKE '%SEARCH%IS%OPTIMIZED%'
Copy

Pour les requêtes qui utilisent RLIKE, REGEXP, et REGEXP_LIKE sur du texte :

  • L’argument subject doit être une colonne TEXT dans une table pour laquelle l’optimisation de la recherche est activée.

  • L’argument pattern doit être une constante de chaîne.

Pour les expressions régulières, le service d’optimisation des recherches fonctionne mieux lorsque :

  • Le modèle contient au moins une sous-chaîne littérale de cinq caractères ou plus.

  • Le motif spécifie que la sous-chaîne doit apparaître au moins une fois.

Par exemple, le motif suivant spécifie que string doit apparaître une ou plusieurs fois dans le sujet :

RLIKE '(string)+'
Copy

Le service d’optimisation de la recherche peut améliorer les performances des requêtes présentant les modèles suivants, car chaque prédicat spécifie qu’une sous-chaîne de cinq caractères ou plus doit apparaître au moins une fois. (Notez que le premier exemple utilise une constante de chaîne entre dollars pour éviter l’échappement des caractères de barre oblique inverse).

RLIKE $$.*email=[\w\.]+@snowflake\.com.*$$
Copy
RLIKE '.*country=(Germany|France|Spain).*'
Copy
RLIKE '.*phone=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
Copy

En revanche, l’optimisation de la recherche n’utilise pas de chemins d’accès à la recherche pour les requêtes présentant les schémas suivants :

  • Motifs sans aucune sous-chaîne :

    RLIKE '.*[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
    
    Copy
  • Modèles qui ne contiennent que des sous-chaînes de moins de cinq caractères :

    RLIKE '.*tel=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
    
    Copy
  • Modèles utilisant l’opérateur d’alternance dont l’une des options est une sous-chaîne de moins de cinq caractères :

    RLIKE '.*(option1|option2|opt3).*'
    
    Copy
  • Motifs dans lesquels la sous-chaîne est facultative :

    RLIKE '.*[a-zA-z]+(string)?[0-9]+.*'
    
    Copy

Même lorsque les sous-chaînes littérales sont plus courtes que cinq caractères, le service d’optimisation de la recherche peut encore améliorer les performances de la requête si l’expansion de l’expression régulière produit un littéral de sous-chaîne de cinq caractères ou plus.

Par exemple, considérons le motif suivant :

.*st=(CA|AZ|NV).*(-->){2,4}.*

Dans cet exemple :

  • Bien que les littéraux des sous-chaînes (par exemple, st=, CA, etc.) soient plus courts que cinq caractères, le service d’optimisation de la recherche reconnaît que la sous-chaîne st=CA, st=AZ ou st=NV (chacune d’entre elles comptant cinq caractères) doit apparaître dans le texte.

  • De même, même si la sous-chaîne littérale --> est plus courte que cinq caractères, le service d’optimisation de la recherche détermine que la sous-chaîne -->--> (qui est plus longue que cinq caractères) doit apparaître dans le texte.

Le service d’optimisation de la recherche peut utiliser les chemins d’accès à la recherche pour faire correspondre ces sous-chaînes, ce qui peut améliorer les performances de la requête.