Réduction des requêtes de table
Découvrez comment réduire le nombre de requêtes pour maximiser les performances.
Plus vous avez de requêtes, plus elles ont d’impact sur les performances. Cet article traite de deux façons de minimiser les requêtes pour maintenir les performances aussi rapides que possible.
Règles d’application
Lorsque vous créez une configuration, réfléchissez à la manière dont vous pourriez l’implémenter pour minimiser les requêtes.
Par exemple, supposons que vous ayez une table de la longueur, de la largeur et de la hauteur de divers composants. Une fois que vous avez sélectionné un numéro de pièce, vous souhaitez interroger ces valeurs pour calculer le volume. La meilleure façon d’interroger ces informations dépend du cas d’utilisation et de l’endroit où les valeurs sont nécessaires en aval de la requête.
Si la configuration n’utilise que le volume total, la meilleure approche consiste à placer la requête dans la règle de détermination avancée pour le volume, similaire à ce code simplifié :
- Interroger L, W et H à partir de la table
- Var vol=L*W*H
- Vol de retour
Nombre total de requêtes : 1.
Cependant, si vous écrivez une règle de volume et que vous savez que vous devrez utiliser les valeurs de longueur, de largeur et de hauteur ailleurs, le code ci-dessus n’est pas approprié. Au lieu de cela, vous devez écrire votre règle de détermination comme suit :
- Var vol = L*W*H
- Vol de retour
Vous devez avoir les requêtes dans les règles de détermination. Les règles de détermination ne peuvent définir qu’un seul champ à la fois, ce qui nécessite trois règles de détermination (une règle pour la longueur, une règle de largeur et une autre de hauteur) et trois requêtes. Cela empêche d’exécuter une quatrième requête (une dans chaque règle de longueur, largeur et hauteur, et une dans la règle de détermination du volume).
Une autre façon de réduire les requêtes consiste à connaître les champs associés à une règle. Supposons que vous ayez une requête dans une règle qui fait référence à un grand nombre de champs. La règle s’exécute chaque fois que l’un des champs associés à cette règle change. Par conséquent, la requête s’exécute à chaque fois.
Disons que vous devez calculer le volume, puis multiplier ce volume par la densité (qui peut changer en fonction du matériau sélectionné par l’utilisateur) pour obtenir le poids total. L’utilisateur n’a pas besoin d’utiliser le volume ailleurs en aval. Voici un exemple de script :
- Requête L,W,H à partir de la table
- Var vol= L*W*H
- Masse var = vol * cfg.density
- Masse de retour
Le problème est qu’à chaque fois que la densité change, la règle s’exécute, puis la requête s’exécute. Mais les valeurs de L, W et H ne changent pas. Par conséquent, le processeur doit aller à la table, trouver les valeurs pour L, W et H, et redéfinir la variable vol à la même valeur qu’auparavant. Une meilleure approche consiste à calculer le volume comme un champ distinct avec une règle distincte. Ensuite, écrivez la règle de masse comme suit :
var mass = cfg.volume * cfg.density;
return mass;
La masse recalcule toujours à chaque fois, mais c’est prévu. Aucun temps de traitement n’est perdu à faire des requêtes inutiles et à redéfinir les valeurs.
Interrogation d’une liste
Comme vu ci-dessus avec L, W et H, vous pouvez extraire plusieurs colonnes d’une table en une seule requête. Dans d’autres cas, vous pouvez interroger la table sur plusieurs valeurs. Par exemple, supposons que vous ayez une liste déroulante à sélection multiple (nom de champ selectedColors) de couleurs différentes. Vous avez également un tableau « teintes » qui a une colonne rouge, bleue et verte pour vous indiquer les ratios.
Si vous souhaitez interroger la table pour toutes les options sélectionnées de la liste déroulante à sélection multiple, deux options s’offrent à vous.
for (color of cfg.selectedColors){
var tableResults=lookup(“Select blue, red, green from hues where value := value”, {“value”: color});
//more code
Cette boucle for signifie que le nombre de requêtes est basé sur le nombre d’options sélectionnées pour le champ selectedColors . Alternativement, le code suivant interroge la table une seule fois.
var tableResults=lookup(“select blue, red, green from hues where value in (:list)”, {“list”: cfg.selectedColors});
Cette méthode est meilleure.
Pour en savoir plus sur les éléments pris en charge dans une requête, reportez-vous à la section La fonction de recherche : commandes et syntaxe.