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 :

TQuery : pourquoi tant de lenteurs


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Editeur
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Editeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Par défaut TQuery : pourquoi tant de lenteurs
    l'utilisation de TQuery avec écriture de requête SQL pour insertion d'enreg. dans une table est 2 à 3 fois plus lente que l'utilisation d'un composant TTAble avec Append et post....
    est-ce normal ?
    comment expliquer cela ?

  2. #2
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 12
    Par défaut
    Bonjour, on peut avoir le code de votre requete d'insertion, car logiquement c le Tquery et plus rapide pour l'insertion que le TTable car Ttable bouffe plus de ressource que le Tquery, on peut dire que tout les composant BDE sont absolettes et bouffe trop de ressource. Par rapport aux composant Interbase, dbexpress et ado.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 41
    Par défaut
    je te propose un article (en anglais) extrait du site
    http://www.logicfundamentals.com/

    " Tables vs. Query Components - Differences between Desktop and C/S databases:

    The reason there are both Table and Query components is due to the fact there are table-oriented databases like Dbase, Paradox, or Access, and there are set-oriented databases like Interbase, Oracle, and MSSQL. These different types of database systems work and behave differently from one another and the same methods of access cannot be equally applied.

    Table components like TTable are specifically designed to work best with table-oriented systems - they are native to them. Using Query components against such databases is slower because they SQL statements must be interpreted into table-oriented calls for that database.

    Query components are specifically designed to work best with set-oriented databases that understand SQL directly and were designed to work this way. Using Table components against such a system is slower because the table-oriented functions must be converted into SQL statements to be sent off to the database.

    Some of the things that Table components do that eat time and resources over a network with an SQL system are:

    On Opening, it sends many queries to the database to get all the metadata for fields and indexes in the selected table in order to provide you with a selection of these.
    Most Table components will select all fields even if you only want a few. If you have large records with many fields, this can be disasterous for performance.
    Using Locate or FindKey or RecordCount forces all records to be fetched from the server to the client because it is the Table component that must do the searching or counting (some table components may be smart enough to use SQL in certain cases, but at least most do not).
    If used in a grid, Table components must frequently execute multiple queries to fill the grid whenever you change record positions.
    Table components prevent you from using the power of SQL when working against a real SQL server - they only see physical tables (or views in SQL systems), whereas you can use Query components to select any relationships between any number of tables and get exactly the data you need.

    With Query components, you still need to use them right to get the most out of them, but the point is that you can use them right with Clisnt/Server databases.

    With the exception of extremely small "lookup" type tables (e.g. State codes) always use Where clauses to limit the number of records brought back. Unless you are performing batch processing there is rarely a genuine need to fetch all records for a large table, this is especially true in the case of visual presentations - users do not need to browse thousands of records (they often think they do because that is how they have worked previously).
    Unless you really need every field in a table, always specify the fields you actually need (e.g. "select cust_id, cust_name from...", not "select * from...").

    Avoid editing records in a grid, use grids only for selection. This allows you to only select the minimum fields needed for selection, and then use another query to select all fields for that one selected record for editing purposes.
    Unless the result set is small, never use the Filter property or OnFilter event, or call RecordCount with a Query component, these force the entire record set to be fetched. If you really need the record count, use another query to get it so the server will do the counting and send back the count itself instead of all the records.

    By: Wayne Niddery "

  4. #4
    Membre confirmé
    Homme Profil pro
    Editeur
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Editeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Par défaut
    Citation Envoyé par brikh Tsoufik
    Bonjour, on peut avoir le code de votre requete d'insertion, car logiquement c le Tquery et plus rapide pour l'insertion que le TTable car Ttable bouffe plus de ressource que le Tquery, on peut dire que tout les composant BDE sont absolettes et bouffe trop de ressource. Par rapport aux composant Interbase, dbexpress et ado.
    non, pas d ecode. Sur une boucle de 1300 insertions dans une table de 30 champs, avec écriture à chaque itération d'une requête d'insertion cela met environ 30 secondes. En utilisant un composant TTable, avec TTable.Append, TTable.FieldByName..... pour chacun des champs, et un TTable.POst à la fin, et bien cela met 4 secondes !!!!!!!
    La différence est tout de même extrêmement significative n'est-il point

  5. #5
    Membre confirmé
    Homme Profil pro
    Editeur
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Editeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Par défaut
    Citation Envoyé par brikh Tsoufik
    Bonjour, on peut avoir le code de votre requete d'insertion, car logiquement c le Tquery et plus rapide pour l'insertion que le TTable car Ttable bouffe plus de ressource que le Tquery, on peut dire que tout les composant BDE sont absolettes et bouffe trop de ressource. Par rapport aux composant Interbase, dbexpress et ado.
    et pourtant, en pratique, je vous assure que par exemple l'utilisation de la procédure SetRange sur un TTable est extrêment plus rapide que l'utilisation d'une requête via un TQuery....
    cela n'incite pas vraiment à laisser tomber le BDE ne trouvez-vous pas

Discussions similaires

  1. Model mixte, pourquoi tant de haine? (Covtest)
    Par Romanita dans le forum SAS STAT
    Réponses: 0
    Dernier message: 12/10/2009, 21h15
  2. Unicode : pourquoi tant de haine ?
    Par Ggamer dans le forum Général Python
    Réponses: 2
    Dernier message: 10/04/2008, 21h22
  3. Réponses: 19
    Dernier message: 14/11/2006, 16h45
  4. [manuels unix]Pourquoi tant de haine ?
    Par xavlours dans le forum La taverne du Club : Humour et divers
    Réponses: 5
    Dernier message: 23/09/2006, 12h48

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