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.

Cette capacité inclut les prédicats qui utilisent :

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. (L’activation de l’optimisation de la recherche au niveau de la table n’optimise pas la recherche de sous-chaînes.) Par exemple :

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

Les recherches de sous-chaînes ne sont pas optimisées si vous omettez la clause ON.

Le service d’optimisation des recherches peut améliorer les performances lors de la recherche de sous-chaînes de 5 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 à la recherche pour le prédicat suivant, car la sous-chaîne fait moins de 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 car la sous-chaîne est plus courte que 5 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 motif contient au moins une sous-chaîne littérale de 5 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 des recherches peut améliorer les performances des requêtes comportant les motifs suivants, car chaque prédicat spécifie qu’une sous-chaîne de 5 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
  • Motifs qui ne contiennent que des sous-chaînes inférieures à 5 caractères :

    RLIKE '.*tel=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
    
    Copy
  • Les motifs qui utilisent l’opérateur d’alternance où une option est une sous-chaîne plus courte que 5 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 5 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 5 caractères ou plus.

Par exemple, considérons le motif suivant :

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

Dans cet exemple :

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

  • De même, même si la sous-chaîne littérale --> est plus courte que 5 caractères, le service d’optimisation des recherches détermine que la sous-chaîne -->--> (qui est plus longue que 5 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.