IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Optimisation lecture avec SQL


Sujet :

WinDev

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 65
    Points : 47
    Points
    47
    Par défaut Optimisation lecture avec SQL
    Bonjour,

    j'ai fait une connexion sql avec mon AS400 afin de pouvoir lire des tables et pouvoir faire un certain nombre de requête.

    Mon problème principal aujourd'hui, c'est une table de l'AS400 comportant 700 000 enregistrements, il me faut environ 4 minutes pour l'afficher dans une table de WINDEV.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ResSQL est un booléen
    	ResSQL = SQLExec("SELECT * FROM TOTO.TOTO1", "REQ1")
    	SI ResSQL ALORS
    		SQLTable("REQ1","TABLE_TOTO1")
    		nNbenr est un entier = TableOccurrence(TABLE_TOTO1)
    	SINON
    		// Erreur SQL
    	FIN
    	SQLFerme("REQ1")
    Existe-t-il un moyen de le fair eplus rapidement.

    A SAVOIR :
    J'avais pensé à importer qu'une partie de la table mais je suis bien obligé de la lire pour y mettre des conditions, du coup, c'est pa splus rapide.

    Si quelqu'un a une idée révolutionnaire, je suis preneur.

  2. #2
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Bonjour,

    L'idée n'est absolument pas révolutionnaire, mais vous devriez bannir les * de vos requêtes et mettre les champs.
    Il se trouve que cela est une des raisons de lenteur.

    Mais je vous l'accorde, cela ne va pas diviser le temps par 2.

    Question: avez vous beaucoup de champs, et si oui, avez vous besoin de tous ?

    Personnellement, à 350 milles enregistrement, je mets environ de 60 à 80 secondes.

    Si j'ai une autre idée.................

    Bonne après midi
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  3. #3
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 65
    Points : 47
    Points
    47
    Par défaut
    Bonjour Raptor92,

    Il y a environ 70 champs et j'ai pas bien le choix, je suis obligé de tous les récupérer.

    En fait, il y a un champs date (environ 5 ans d'historique), j'ai besoin de récupérer au mieux les 2 dernières, j'ai pensé parcourir la table en commençant par la fin et remonter et lui dire de s'arrêter de lire quand la date est supérieure à 2 ans.

  4. #4
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Bonsoir,

    Si je comprends bien, une des conditions possible est de limiter la recherche à deux années de données.

    Si c'est cela, pourquoi ne pas intégrer cette condition dans votre requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DATE <='20080724'
    Cela augmenterais la vitesse de recherche.
    Enfin, c'est juste une piste

    Bonne soirée
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Bonsoir,

    Votre syntaxe de SQLTable n'utilise pas le fetch partiel donc toutes les données doivent être transférées avant d'avoir la main. Préférez donc le fetch partiel.

  6. #6
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 65
    Points : 47
    Points
    47
    Par défaut
    Tout d'abord, un merci à Raptor92.

    C'est tout simple et je n'y est même pas pensé, en utilisant cette méthode, je suis au alentour de 1 minute 30 d'attente, c'est déjà mieux.

    (Vemolines) La syntaxe fetch partiel, je ne la connais pas bien, je suppose que c'est avec SqlAvance, si vous avez un petit exemple à me donner, je ferais volontier l'essai pour comparer et voir si je peux encore réduire le temps d'attente qui est très mal perçu par l'utilisateur.

    En tout cas merci por votre aide qui est très précieuse.

  7. #7
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Bonjour,

    Vu que vous êtes nouveau sur le forum, nous n'allons pas faire preuve agressivité (humour!!!) à votre égard.

    Pour autant, il est de règle que nous fassions preuve de recherche et de tentatives avant de faire appel à une aide de l'un des membres.

    Vmolines (que je salue) vous a donné une piste complémentaire de la mienne, je pense que vous auriez rechercher sur l'aide Windev avant de répondre.
    De plus, en nous communiquant le code que vous avez trouver, nous aurions pût mieux vous épauller.

    En attendant, voici un exemple de code fonctionnel utilisant "sqlFetch":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Requete="SELECT..............................WHERE................................................."
    SI SQLExec(Requete,ReqName) ALORS
    	SI SQLFetch(ReqName)=0 ALORS
    		imprimante=SQLLitCol(ReqName,1)
    	FIN
    FIN
    SQLFerme(ReqName)
    Pour conclure, ne prenez pas mal les remarques, elles n'ont rien de désobligeantes, nous sommes tous passés par ce stade, et force de constater que ce sont ces remarques qui m'ont aider à comprendre.

    Bon courage
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Moi je dirais de faire un multitâche(-1) dans une boucle de lecture, ça rendrait la main à l'utilisateur pendant le remplissage. Par contre, ça ne réduit pas le temps de remplissage. La seule façon (avec Windev) d'aller plus vite, c'est de réduire le nombre de lignes à afficher.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete SQL - Optimisation function avec nombreux parametres
    Par Gallinette59 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/12/2008, 23h55
  2. Optimiser le temps réponse avec sql server
    Par yuri2008 dans le forum Développement
    Réponses: 1
    Dernier message: 30/05/2008, 23h41
  3. Lecture données avec sql compact et VB.Net
    Par riderfun dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/05/2008, 21h21
  4. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum Développement
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  5. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/09/2007, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo