|
Optimisation requete SQL => J'ai compris ! |
Iniciado por metsdumanche, 01,dic. 2004 19:09 - No hay respuesta |
| |
| | | |
|
| |
Publicado el 01,diciembre 2004 - 19:09 |
Bonjour,
Je viens de découvrir ce qui expliquait que certaines requêtes mettaient 10 fois plus de temps à s'exécuter avec Windev Hyperfile, qu'avec Delphi en ADO sur table Access ... Quand je dis 10 fois, c'est mesuré ! Sur les mêmes tables, même structure, mêmes requêtes.
Et j'ai trouvé d'où ça venait.  Aucun rapport avec le moteur SQL (heureusement). En fait, il apparaît que Windev perd énormément de temps à chaque fois que l'on récupère une des colonnes retournées par la requête en utilisant MaRequête.valeur !!!
Par exemple, j'ai une requête qui retourne 1000 lignes (d'une table qui en contient à peine plus). La requête met moins d'une seconde à s'exécuter. Normal.
Ensuite, je rentre dans une boucle : TANTQUE HTrouve(MaRequête) ... HLitSuivant(MaRequête) FIN Si je ne fais rien dans cette boucle, c'est instantané. Normal.
Par contre, si je rajoute plein d'instructions qui ne font rien d'autre que de lire les valeurs de la ligne retournée, ça démultiplie le temps d'exécution de façon exponentielle ! Ainsi, j'arrivais à 10 secondes au lieu d'1, rien qu'en lisant plusieurs fois les MaRequête.valeur !
Ensuite, toujours dans la boucle de lecture, j'ai rangé une fois pour toutes dans des variables locales les valeurs retournées par ma requête (1 ligne). Par la suite, j'ai utilisé ces variables au lieu de relire les MaRequête.xxx, et le même traitement prend maintenant moins de 2 secondes (au lieu de 10).
C'est à mon avis plus qu'un "détail", et j'ai pensé que vous pouviez avoir envie de tester ...  Si le support veut confirmer ou infirmer, ce sera avec plaisir ...
-- Jean-Michel CAMBOT metsdumanche chez baliciel.com Baliciel HomePage : http://www.baliciel.com/ |
| |
| |
| | | |
|
| | | | |
| | |
|