Quelques conseils pour rédiger vos requêtes 🙂
-
Pour avoir des performances optimales, utilisez dans les POUR CHAQUE et RECH des champs d'index, dans l'ordre de l'index, avec des égalités strictes. Sinon, préférer des conditions avec « SI » plus bas dans la boucle.
-
Il n'est pas obligatoire d'utiliser tous les champs de l'index, on peut utiliser seulement les premiers avec de bonnes performances.
-
Les conditions à base de « COMMENCE PAR », « CONTIENT », « > » sont moins performantes que celles à base de « = ».
-
De manière générale, éviter avec ces conditions (« COMMENCE PAR », « CONTIENT », « > ») les juxtapositions de conditions de type (POUR CHAQUE Cond1 ET Cond 2 ET Cond3...). Préférer des conditions avec « SI » plus bas dans la boucle.
Exemple :
POUR CHAQUE (Cond1) (Cond1 portant si possible sur une égalité stricte)
SI (Cond2)
SI (Cond3)
action
FB
FB
FB
-
Si vous faites une recherche sur un enregistrement précis selon des conditions qui suivent un index unique, utiliser RECH (Rechercher) plutôt que RECH PREM (Rechercher Premier).
Exemple :
RECH TBD/SOC DTD CDClient AVEC DTD CDClient.CliResRef = VLO.CliResRef ET DTD CDClient.CliGenRef = VLO.CliGenRef
action
FB
Possible car CliResRef+CliGenRef est l’index unique de la table CDClient.
-
Pour aider à la bonne rédaction des requêtes, les requêtes de type REB, RCT et PSD sont contrôlées lors de la génération et la colonne « War » vient se cocher pour les requêtes devant être contrôlées (La branche « Requêtes en warning » regroupe toutes les requêtes dont la génération a révélé au moins un avertissement). L’action « Consultation Problèmes Requête » (sur les requêtes n’étant pas en erreur de génération) présente la liste des avertissements :
|
Il est indiqué pour chaque avertissement :
|