Trucs et astuces : SQL HF : booster une requete select where IN
Posté par R&B le 10/10/2002 1:20:00 (1702 lectures) Articles du même auteur
Trucs et astuces

Confronté en 147J à des problèmes de limites d'item dans les liste de la clause IN des select, un truc est surgit lors de nos tests...


La clause IN dans la condition d'un select permet de fixer une liste des valeurs possibles pour une rubrique.
Reste qu'il ne vaut mieux pas avoir trops d'éléments dans la liste sous peine de voir l'execution de la requete s'éterniser...

La solution est trés simple. Elle consiste à ne pas utiliser la fontionnalité IN du SQL HF mais plutot un fichier temporaire et une simple jointure normale. Le gain de temps à l'execution nous a laissé sans voix.

En fait on envoies la liste dans une fichier temporaire décrit dynamiquement.


// Ajoute le fichier temporaire dans le spectre les objet du projet
EXTERNE TMP
// Décrit le fichier temporaire en fonction de la rubrique en relation
dfic est une description de fichier
drub est une description de fichier
dfic..nom="TMP"
dfic..nomphysique=replocal+"TMP"
drub..nom="CLE"
drub..type=FICHIER.RUBRIQUELISTEE..type
drub..taille=FICHIER.RUBRIQUELISTEE..taille
drub..TypeClé=hCléDoublon // pour indexer le fichier temporaire
HDécritRubrique(dFic,drub)
HAnnuleDéclaration("TMP")
HDécritFichier(dFic)
HCréation(TMP)
// Reste ensuite à remplir le fichier temporaire avec les valeurs de la liste
hRAZ(TMP)
TMP.CLE="..."
hAjoute(TMP)
// contrôles inutiles le fichier n'est lié à rien et la propriété nomphysique vous permet de le créer en local


Et on réalise la requete


MonSQL est une chaine
MonSQL = "Select * from FICHIER,TMP where FICHIER.RUBRIQUELIEE=TMP.CLE"
hExécuteRequeteSQL(MesDonnée,MonSQL)
...


Voilà, dans notre cas on est passé pour un petit fichier de 40 lignes et une liste de 20 valeurs d'environ 20s à qq dizièmes.

Comme quoi, il existe parfois des solutions simples pour améliorer les choses.

@+ R&B






Autres articles
2/6/2015 19:00:00 - WDForge 2.0 est disponible !
7/1/2014 11:10:00 - WDForge
30/9/2009 11:30:00 - Un analyseur d'objets externes
16/4/2009 18:37:49 - Convertisseur de base HyperFile vers XML
22/4/2008 23:04:01 - WLSCRIPT - Ligne de commande Linux

Connexion
Menu
Sujets d'Articles
Top Articles
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2