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

Bases de données Delphi Discussion :

Query réduire temps d'exécution


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut Query réduire temps d'exécution
    Bonjour,

    dans mon application, j'utilise une Query pour faire une sélection des enregistrements. La TTable contient 100000 enregistrements pour l'instant.

    Voici le SQL de la Query :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Field1, Field2, Field3, Field4
    FROM MyTable
    WHERE Field1 = Field1
    Order BY Field1

    And the button code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Query1.Filtered:=false;
    Query1.DisableControls;
    if not Query1.Prepared then
    Query1.Prepare;
    Query1.Open;
    Query1.EnableControls

    pour 100000 enregistrements, ça prend 10 secondes. Est-ce que ce temps d'exécution est bon svp?

    Ma Table peut contenir des dizaines de millions d'enregistrements, donc ça peut prendre des dizaines de minutes...
    Comment faire pour optimiser et réduire le temps d'exécution svp?
    Ou y a-t-il une autre méthode à suivre?

    Les champs sont indexés.

    N.B. Base de données : Absolute Database.
    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par NABIL74 Voir le message
    Ma Table peut contenir des dizaines de millions d'enregistrements, donc ça peut prendre des dizaines de minutes...
    Comment faire pour optimiser et réduire le temps d'exécution svp?
    à mon avis c'est beaucoup, beaucoup trop long !
    test rapide pour info, une simple requêtesur des champs non indexé de surcroît, sans préparation préalable (table de 370000 enregistrement) prend pour firebird (base locale) environ 5s, préparée moins de 1s et à peu près les mêmes temps (hors temps de connexion) sur un serveur (non occupé) éloigné (donc via internet)

    Les champs sont indexés.
    si le champ Field1 est indexé alors je ne vois pas
    mais la query, je pense que tu t'es trompé (du moins dans la clause WHERE)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Field1 = Field1
    c'est (désolé) complètement idiot et ne sert à rien

    N.B. Base de données : Absolute Database.
    reste pour moi, cette, inconnue
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Bonjour,

    si le champ Field1 est indexé alors je ne vois pas
    mais la query, je pense que tu t'es trompé (du moins dans la clause WHERE)
    c'est (désolé) complètement idiot et ne sert à rien
    Je l'avais fait sans la clause Where mais quand j'ai vu le fichier d'aide de Absolute Database sur l'optimisation, je l'ai ajouté.
    - Temps d'exécution(100000 records) avec where: 10 s
    - Temps d'exécution(100000 records) sans where: 13 s

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonsoir

    where Field1=Field1 est toujours vrai donc , n'a aucune utilité
    on met une clause WHERE quand il y a sélection de valeur d'un champ , par exemple ou par paramètre WHERE Field1=:Param ou le paramètre a une valeur que l'on passe avant d'ouvrir la requête
    C'est pour cela que je demandais s'il n'y avait pas un problème dans la clause
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Bonsoir,

    Ok Serge pigé. Comme je l'ai déjà dis, j'ai trouvé ça dans le help de cette BDD.
    Comment fais-tu ta Query de sélection pour des millions d'enregistrements? Passes-tu par un Thread? ou par ClientDataSet ou ...?

  6. #6
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Je rejoins Serge sur les temps de réponse pour un ensemble de données équivalent sur SQL Serveur.

    La base est en locale ? La requête exécutée simplement dans le SGBD met combien de temps ? Si déjà la, le temps d'exécution est long on pourrais avoir un début de reponse..

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Citation Envoyé par NABIL74 Voir le message
    Comment fais-tu ta Query de sélection pour des millions d'enregistrements? Passes-tu par un Thread? ou par ClientDataSet ou ...?
    Même pas, j'ai fait le test directement avec un GUI (flamerobin)
    A mon avis cela vient d'Absolute Database, il me semble que c'est à peu près comme Paradox moins le BDE or, si c'est le cas, Paradox travaille surtout en mémoire, pour avoir des résultats si catastrophique, c'est que tu mets le poste "à genoux".
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Certains providers gère une gestion de Packet
    C'est le PacketRecords du TClientDataSet, ainsi un SQL facile à traiter mais renvoyant beaucoup de ligne, c'est instantané à ouvrir et récupérer les 25 premiers enregistrements.
    Par contre, parfois, cela ne suffit pas, un SQL complexe, avant d'envoyer la moindre ligne mettra du temps à s'exécuter et là il n'y a rien à faire (sauf si tu es un admin pro sur SQL Server ou Oracle)

    Absolute Database pour 10 millions d'enregistrement, cela me semble bien lourd
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Bonsoir,
    J'ai suivi le conseil de Serge. J'ai migré vers Firebird + Zeos et le problème de recherche et de lourdeur a disparu.
    Merci pour votre aide.
    Nabil

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

Discussions similaires

  1. Réduire le temps d'exécution
    Par Claire789 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 27/08/2014, 12h17
  2. Réponses: 2
    Dernier message: 24/04/2011, 08h43
  3. Réponses: 3
    Dernier message: 23/03/2010, 16h20
  4. Comment réduire le temps d'exécution sous Windows?
    Par jlg_47 dans le forum Calcul scientifique
    Réponses: 9
    Dernier message: 21/03/2010, 22h58
  5. Réponses: 1
    Dernier message: 28/09/2009, 08h30

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