1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Tests rapidité HExecuteRequeteSql et SqlExec

Discussion dans 'Windev' créé par gapplicat, Mar 18, 2018.

  1. gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    399
    J'aime reçus:
    708
    Je me suis toujours demandé quelle fonction était la plus rapide entre HExecuteRequeteSql et SqlExec
    j'ai donc tester les deux méthodes :
    1. 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
    2. connexion effectuée avec la fonction SQLConnecte, requête exécutée avec la fonction SqlExec, parcours effectué avec la fonction SqlAvance.

    Et bien les résultats sont sans appel, quelque soit le nombre d'enregistrement, ou la méthode (locale et réseau)

    Résultats (moyenne sur 10 exécutions) :

    1. HExecuteRequeteSql : 14,01 secondes
    2. SqlExec : 4,23 secondes
    Donc, la fonction SqlExec est beaucoup plus rapide, mais, son utilisation est BEAUCOUP moins claire que la fonction HExecuteRequeteSql sur laquelle on peut travailler avec le nom des variables

    Code (Text):

    i est un entier = 0
    SQLExec("SELECT NOM, PRENOM, POSTE, PHOTO FROM CLIENT", "REQ1")
    TANTQUE SQLAvance("REQ1") = 0
            i++
            // Récupérer les données
            NOM[i] = SQLLitCol("REQ1", 1)
            PRENOM[i] = SQLLitCol("REQ1", 2)
            POSTE[i] = SQLLitCol("REQ1", 3)
            {"IMAGE"+i} = SQLLitMémo("REQ1", 4)
    FIN
    SQLFerme("REQ1")
     
    le même mais avec la fonction HExécuteRequêteSQL

    Code (Text):


    i est un entier = 0
    ReqTache est une Source de Données

    HExécuteRequêteSQL(ReqTache, SELECT NOM, PRENOM, POSTE, PHOTO FROM CLIENT"
    Hlitpremier(ReqTache)
    TANTQUE pas hendehors(ReqTache)
            i++
            // Récupérer les données
            NOM[i] = ReqTache.nom
            PRENOM[i] = ReqTache.prenom
            POSTE[i] = ReqTache.poste
            {"IMAGE"+i} = ReqTache.photo
            Hlitsuivant(ReqTache)
    FIN
    HAnnuleDéclaration(ReqTache)
     
    Conclusion
    Donc pour conclure, le dilemme reste présent, entre temps de réponse et clarté du code...
    Pour ma part, je n'utilise SqlExec que sur les requêtes très lentes ou nécessitant un temps de réponse rapide.
     
  2. suenodesign

    suenodesign Well-Known Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    507
    J'aime reçus:
    732
    Merci. Ça aide.
     
  3. joker

    joker New Member
    MEMBRE WX

    Inscrit:
    Jan 30, 2018
    Messages:
    0
    J'aime reçus:
    13
    ThankS

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    [Note] penser à acheter des croquettes SqlExec pour Rantanplan
     
  4. aminej76

    aminej76 Active Member
    MEMBRE WX

    Inscrit:
    Jan 23, 2018
    Messages:
    283
    J'aime reçus:
    102
    Excellente idée. Lestest est effectué sur quelle base de donnée ? HFSQL , SQL Server ?
    Merci bien.
     
    #4 aminej76, Mar 18, 2018
    Dernière édition: Mar 18, 2018
  5. ProDev

    ProDev Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    371
    J'aime reçus:
    372
    Très bonne expérience... Merci

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


     
  6. aminej76

    aminej76 Active Member
    MEMBRE WX

    Inscrit:
    Jan 23, 2018
    Messages:
    283
    J'aime reçus:
    102
    J'ai effectué ce test avec une base HFSQL/CS
    voici le code de connection

    Code (Text):
    SQLConnecte("127.0.0.1:4900" , "ADMIN" , "PASS","BASE_CAC","HFSQLCS" )
     
    Résultats (moyenne sur 10 exécutions) : Même chose avec les deux méthodes. Pas de différence.
    Il se peut que SqlExec fonctionne parfaitement avec une base de donnée tierce.
     
  7. LAPIPE2018

    LAPIPE2018 Active Member
    MEMBRE WX

    Inscrit:
    Fev 17, 2018
    Messages:
    648
    J'aime reçus:
    227
    SQlexec est au départ fait pour l'ODBC et accès Natif. Hexecuterequetesql pour les OLEDB, en fait c'est le milieu entre SQLexec et Hexecuterequete. En HF, C'est inutile d'aller utiliser Hexecuterequesql qui n'apportera presque rien.
     
  8. Advita

    Advita Active Member
    MEMBRE WX

    Inscrit:
    Jan 13, 2018
    Messages:
    71
    J'aime reçus:
    107
    Merci pour le test. Effectivement, chaque code a ses caractéristiques :
    Voici l'explication de windev :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
    stef13013 et elhacene aiment ça.
  9. RayMM

    RayMM Member

    Inscrit:
    Mar 3, 2018
    Messages:
    48
    J'aime reçus:
    7
    Merci pour cette analyse. Mois aussi je confirme ces résultats :
    Durant mon expérience, on a travaillé au début avec des bases de données HF, ensuite on a migré vers MySQL avec un accès natif, et pour le moment on travaille pour convertir le code sous forme des fonctions SQL au lieu des fonctions Hxx.
    La conclusion c'est que les fonctions Hxx sont plus rapide bien sûr avec HF qu'avec un autre accès natif, mais on utilisant des requêtes (INSERT au lieu de HAjoute, UPDATE au lieu de HModifie, ...) MySQL est plus rapide. En plus on remarque la rapidité des fonctions SQL par rapport aux fonctions Hxx une fois on fait le test sur des requêtes avec un nombre intéressant d'enregistrements.
     
    stef13013 apprécie ceci.
  10. RayMM

    RayMM Member

    Inscrit:
    Mar 3, 2018
    Messages:
    48
    J'aime reçus:
    7
    Voici une autre analyse dans le même sens :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
    ptrous et elhacene aiment ça.

Partager cette page

Chargement...