Accélération des requêtes avec des fonctions scalaires grâce à l’optimisation de la recherche

Une fonction scalaire renvoie une seule valeur à chaque invocation. Le service d’optimisation de la recherche peut améliorer les performances des requêtes qui utilisent des fonctions scalaires dans les prédicats d’égalité. La fonction scalaire peut être une fonction scalaire définie par le système ou une fonction SQL scalaire définie par l’utilisateur.

Les sections suivantes fournissent de plus amples informations sur la prise en charge de l’optimisation de la recherche pour les requêtes qui utilisent des fonctions scalaires :

Permettre l’optimisation de la recherche pour les requêtes qui utilisent des fonctions scalaires

Les requêtes ne sont pas améliorées si vous n’activez pas l’optimisation de la recherche pour les colonnes spécifiées dans les prédicats d’égalité qui utilisent des appels de fonctions scalaires. Pour améliorer les performances des requêtes avec des fonctions scalaires dans une table, utilisez la commande ALTER TABLE … ADD SEARCH OPTIMIZATION pour effectuer les opérations suivantes :

  • Activer l’optimisation de la recherche pour des colonnes spécifiques.

  • Activer l’optimisation de la recherche pour toutes les colonnes de la table.

En général, la meilleure pratique consiste à n’activer l’optimisation de la recherche que pour des colonnes spécifiques. Utilisez la clause ON EQUALITY pour spécifier les colonnes. Cet exemple active l’optimisation de la recherche pour une colonne spécifique :

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

Pour spécifier EQUALITY pour toutes les colonnes des types de données pris en charge (à l’exception de semi-structurées et GEOGRAPHY) :

ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
Copy

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

Types de données pris en charge

Le service d’optimisation de la recherche peut améliorer les performances des requêtes qui utilisent les colonnes des types de données suivants dans les prédicats d’égalité qui emploient des appels de fonctions scalaires :

Les requêtes qui impliquent d’autres types de valeurs (par exemple, VARIANT, FLOAT, GEOGRAPHY, ou GEOMETRY) n’en bénéficient pas.

Exemples de requêtes prises en charge avec des fonctions scalaires

Les requêtes suivantes utilisent des fonctions scalaires et sont prises en charge par le service d’optimisation de la recherche.

Utiliser une fonction scalaire définie par le système dans le prédicat d’une requête

Cette requête utilise la fonction scalaire définie par le système SHA2 dans un prédicat d’égalité. Pour améliorer les performances, assurez-vous que la méthode de recherche EQUALITY est activée pour la colonne mycol dans la table test_so_scalar_function_system.

SELECT *
  FROM test_so_scalar_function_system
  WHERE mycol = SHA2('Snowflake');
Copy

Utiliser une fonction SQL scalaire définie par l’utilisateur dans le prédicat d’une requête

Créez une fonction scalaire définie par l’utilisateur :

CREATE OR REPLACE FUNCTION test_scalar_udf(x INTEGER)
RETURNS INTEGER
AS
$$
  SELECT x + POW(2, 3)::INTEGER + 2
$$
;
Copy

Cette requête utilise la fonction test_scalar_udf dans un prédicat d’égalité. Pour améliorer les performances, assurez-vous que la méthode de recherche EQUALITY est activée pour la colonne mycol dans la table test_so_scalar_function_udf.

SELECT *
  FROM test_so_scalar_function_udf
  WHERE mycol = test_scalar_udf(15750);
Copy