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
Exemples de requêtes prises en charge avec 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);
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;
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 :
Types de données pour les numéros à virgule fixe, y compris les éléments suivants :
Tous les types de données INTEGER, qui ont une échelle de 0.
Les nombres non entiers à virgule fixe, qui ont une échelle différente de 0 (tels que
NUMBER(10,2)
).Transformations de nombres à virgule fixe (par exemple,
NUMBER(30, 2)::NUMBER(30, 5)
).
Types de données Chaîne et Binaire (par exemple, VARCHAR et BINARY).
Types de données de date et heure (par exemple, DATE, TIME, et TIMESTAMP).
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');
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
$$
;
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);