27 octobre 2009
publié par 
Les requêtes HFSQL s'exécutent dans des threads séparés du thread principal de votre application. Cela permet par exemple d'afficher des enregistrements dans une table liée à la requête avant que la requête ne soit totalement exécutée (fetch partiel). Pour que ce mécanisme soit efficace, il est nécessaire que le moteur puisse utiliser une clé de parcours qui soit discriminante à la fois sur la sélection mais également sur le tri.

Reprenons l'exemple précédent : J'effectue une requête sur le fichier client en sélectionnant les clients du département 34 et je souhaite le résultat trié sur le nom du client. Si je n'ai pas de clé particulière, le moteur est obligé de réaliser la sélection de tous les clients avant de pouvoir renvoyer le premier enregistrement. Si je crée une clé composée DEPARTEMENT+NOM, le moteur HFSQL va utiliser cette clé et sera en mesure d'indiquer de renvoyer immédiatement le premier client. Si la requête dure 1 seconde, sans la clé composée, il faudra attendre 1 seconde pour avoir l'affichage du résultat, avec la clé composée, ce sera immédiat.

Attention, il ne faut pas par ailleurs créer trop de clé car la multiplication des clés sur un fichier peut ralentir l'ajout et la modification d'enregistrements (voir Annexe : Comment choisir les bonnes clés).

Comment choisir les bonnes clés ?

Dans un premier temps, il faut déterminer quelles sont les requêtes à optimiser. Ne passer pas de temps à optimiser toutes vos requêtes, certaines sont déjà rapides ou simplement utilisées de manière occasionnelles.
Pour déterminer quelles sont les requêtes à optimiser, utilisez l'analyseur de performances. Prévoyez un menu ou une option dans votre projet pour enregistrer une analyse de performance (AnalyseurDebut/AnalyseurFin). Vous trouverez dans le rapport généré, les requêtes les plus utilisées et les plus longues. C'est pour celles là que vous devez chercher de nouvelles clés dans les fichiers concernés.


A - Requêtes simples :
Dans le cas d'une requête simple, il est important pour optimiser à la fois le temps d'exécution de la requête et la possibilité d'obtenir un fetch du résultat. Il s'agit de créer une clé composée contenant dans une première partie de la clé toutes les rubriques utilisées dans les conditions de type " égalité ".
Dans la seconde partie de la clé,
- si vous souhaitez privilégier le temps total d'exécution de la requête, vous devez ajouter à la clé composée UNE des rubriques utilisée dans les conditions de type " comparaison ". Choisissez la clé la plus discriminante.
- si vous souhaitez privilégier l'utilisation du fetch (requêtes utilisée en affichage), vous devez ajouter dans la clé composée les différentes rubriques de tri dans le même ordre que le tri.

B- Requêtes TOP/BOTTOM :
Pour les requêtes de ce type, le conseil est le même que pour les requêtes simple mais vous devez privilégier le fetch de la requête obligatoirement.

C- Requêtes avec jointures :
Dans une requête avec jointure, on a deux catégories de conditions. Les conditions de sélection dans chaque fichier et les conditions de jointure. Les conseils précédents sont donc valables pour optimiser les critères de sélection. Il sera en plus nécessaire de créer dans chacun des fichiers la clé nécessaire à l'optimisation de la jointure. Il faut donc que la rubrique utilisée dans la jointure soit présente dans une clé, soit de manière unique, soit dans une clé composée.

< Retour