[Actualité] WinDev : fonctions Hlit ou SQL ?
par
, 03/04/2015 à 13h56 (6823 Affichages)
Ce billet traite des temps de réponses des fonctions Hlit et SQL dans l'EDi WinDEV
Nous cherchons tous à avoir une application la plus réactive possible, mais cela arrive d'avoir des latences, les causes de celles-ci peuvent être variées :
- défaut de conception algorithmique
- défaut de conception de la base de données
- échange avec la base de données
- lenteur réseau
- ...
Dans ce billet, je vais traiter les échanges avec la base de données. WinDev nous donne la possibilité de nous connecter à une base par différentes méthodes.
- ODBC
- Ole DB
- Accès natif
Après le choix de la méthode de connexion, nous avons le choix entre deux types de fonctions Hlit ou SQL, mais je me suis souvent posé la question
"Quelle est la différence entre les fonctions Hlitxxx et SQLxxx ? "
En réponse à celle-ci je n’attends pas les différences de syntaxe et de parcours, mais des informations sur les temps de réponse. Au vu de mes recherches sur le Web, je ne suis pas le seul à chercher cette information, c'est pour cette raison que j'ai effectué un petit comparatif.
Contexte Technique
WinDev : Version 19
SGBD : SQL Server 2005
Accès natif : oui
Réseau : Base de données stockée sur une VM
Jeu de tests
Deux jeux de tests sont mis en place
- Requête de type SELECT sur 1 table sélectionnant 7 colonnes et 1 condition dans la clause WHERE sur un champ indexé,
- Requête de type SELECT sur 3 tables sélectionnant 4 colonnes, jointure entre les tables effectuées avec la clause INNER JOIN et une condition dans la clause WHERE sur un champ indexé
Nombre de résultats des requêtes : 49500.
Premier jeu de tests : résultat
Le jeu de test comprend 4 scénarios :
- connexion effectuée avec la fonction HouvreConnexion, requête exécutée avec la fonction HExecuteRequeteSql, nom de la requête dans variable de type chaine.
- connexion effectuée avec la fonction HouvreConnexion, requête exécutée avec la fonction HExecuteRequeteSql, nom de la requête dans variable de source de données.
- connexion effectuée avec la fonction SQLConnecte, requête exécutée avec la fonction SqlExec, parcours effectué avec les fonctions SqlPremier, Sql.endehors et SqlSuivant
- connexion effectuée avec la fonction SQLConnecte, requête exécutée avec la fonction SqlExec, parcours effectué avec la fonction SqlAvance.
Résultats (moyenne des valeurs sur 25 exécutions) :
- 5,48 secondes
- 4,36 secondes
- 5,44 secondes
- 3,80 secondes
Deuxième jeu de tests : résultat
Le jeu de test comprend 3 scénarios :
- connexion effectuée avec la fonction HouvreConnexion, requête exécutée avec la fonction HExecuteRequeteSql, nom de la requête dans variable de type chaine.
- connexion effectuée avec la fonction HouvreConnexion, requête exécutée avec la fonction HExecuteRequeteSql, nom de la requête dans variable de source de données.
- connexion effectuée avec la fonction SQLConnecte, requête exécutée avec la fonction SqlExec, parcours effectué avec la fonction SqlAvance.
Résultats (moyenne sur 10 exécutions) :
- 14,01 secondes
- 13,58 secondes
- 4,23 secondes
Information : Dans les scénarios 1 et 2, les fonctions HExécuteRequeteSql, HlitPremier, Hlitsuivant, ont été appelées avec des options pour optimiser le temps de traitements.
Bon dev à tous