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

Requêtes MySQL Discussion :

Temps de connexion à une Table


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut Temps de connexion à une Table
    Bonjour,

    J'ai une table traitant de nombreuses années à raison d'un enregistrement par jour (plus de 5500 enregistrements), avec de trés nombreux champs ( plus de 150) .

    Lorsque je me connecte sur cette table (Select * from TypeA) le temps d'attente est de 25 à 30 secondes avant que la connexion ne soit effective.

    Si je réduit le nombre d'enregistrements, le temps de connexions tombe à moins de une seconde.

    Si je regarde le trafic réseau, je me rends compte que tous les enregistrements ne sont pas rapatriés sur le client (ce qui est normal).

    Une autre table (calendrier) avec autant d'enregistrements ce connecte en mois d'une seconde.

    J'utilise Delphi, Adoquery et le driver "MySql ODBC 3.51".

    Comment pourrais je réduire le temps nécessaire pour me connecter ?

    Merci

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Tu parles de 150 champs, mais combien d'octets représente une ligne ? (150 champs en integer <<< 150 champs en varchar(200) ): ça peut générer du traffic réseau.

    Pour diminuer le temps d'attente (et pas de connexion), tu peux commencer par rapatrier les 50 ou 100 premières lignes (clause LIMIT), puis demander les suivantes en cas de besoin.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    La plupart des champs sont des Double, decimal et integer.
    Il y a un LongText (vide dans plus de 99% des cas).

    Mais je ne pense pas que se soit dus au trafic réseaux. Si je compare le trafic réseau lors de l'ouverture de cette table, et le trafic lors de l'ouverture d'autres tables (s'ouvrant en moins de 1 seconde), je ne vois pas de trafic plus important. Par contre je vois 1 pic (trés court) lors du open, et un autre pic lorsque le open est fait (30 seconde plus tard). Les 2 pics réunis ne semblent pas ecxesif. en comparaison du pic unique obtenue par l'ouverture d'une autre table.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Une idée: rapatrier uniquement les champs utiles et rajouter des index pour faciliter la recherche.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Mas fois j'ai déjà des index, et je suis en train de modifier le programme pour ne charge qu'une fenêtre de plus ou moins 100 jours. Si je demande une date aux dela, je fermerais la table et la ré-ouvrirais avec une nouvelle fourchette de date.

    Le problème et que j'ai peur qu'une autre table ne me fasse le même problème au bout d'un certain temps. Si je comprend la cause théorique, je pourrais peut être régler le problème à la base et éviter tous risque.

  6. #6
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Pas d'ORDER BY dans ton select * ?

    La table est-elle désorganisée ?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Non pas de Order, Un simple select simple.

    La table à un index primaire, même les enregistrements ont été créer dans l'ordre de la clé primaire. (Ce qui en principe ne change rien, car la table doit être organisé en fonction de cette clé)

    C'est franchement le truc bizard. Facil à contourner par programmation, mais si cela ce produit avec une autre table si le prog. est chez un client.

    Bon c'est vrai que c'est moyennement pénalisant (1 connection à la table dans l'application), par contre un type comme mon patron détruit le process si le programme n'est pas lancer dans la minute qui suit. Et les client à qui le prog. sont destiné ne semblent pas plus patient.

  8. #8
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Plusieurs pistes :
    1- Evitez le SELECT *. Et ne sélectionnez que les champs à afficher.
    2- Lancez une analyse de table et un optimisation de la table.
    3- Evitez les connexions ODBC plus lente et préférez des connexions natives
    4- Pour éviter de vous interroger sur les problèmes de réseaux et autres mesurez les performances de votre requête en vous connectant directement via la console mysql sur le serveur, en lançant la requête (le temps de réponse sera alors afiché clairement en milliseconde)
    5- Utilisez la commande EXPLAIN pour savoir si vous index sont bien utilisés.

    7.2.1. Syntaxe de EXPLAIN (Obtenir des informations sur les SELECT)
    7.2.2. Mesurer les performances d'une requête
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    La console MySql me donne environ le même temps, mais elle me renvoi tout les information à l'écran. Alors que théoriquement je n'ai fait que me connecter sans parcourir le résultat de la requête.

    Le 'select * ' m'est malheureusement indispensable. Par contre j'ai limité le nombre d'enregistrement directement accessible sans avoir a reinitialiser la query.

    La connections ODBC est une demande, je ne peux pas l'éviter.

    A priori l'index utilisé est le bon. Par contre je note l'ordre explain pour d'autre requêtes (dans les éditions)


    Pour m'en sortir, J'ai remplacer les "select * from TYpea" par "Select * From TypeA where (MasterKey >= D1) et (MasterKey <= D2)" avec D1 et D2 égale a la date du jour + ou - 100 jour. La le temps de réponse de la connections est de quelques millisecondes. Lorsque j'essaye de traiter une date, je vérifie que mas date est dans la fourchette; si elle n'y est pas je ferme la requête, et la rouvre en ayant déplacer la fourchette de date.

    Le problème est donc résolu de manière basic. Sauf pour les éditions qui peuvent se faire sur X années (bonjour la lisibilité des résultats avec un listing de 15 à 20 pages), mais la l'attente est noyé dans les traitements des information et ce n'est pas trop gênant.

    Pour le reste j'essaye de comprendre le pourquoi du problème de façon à éviter qu'il ne se reproduise (sur cette appli. ou une autre).

    Enfin, même sans réponse, je vais arrêter mas demande. Inutile d'embéter les autres alors que le programme fonctionne. Par contre je vais continuer d'essayer de comprendre par mois même.

    Merci a tous pour les réponses.

  10. #10
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Le gain sera léger, mais préférez la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * From TypeA where MasterKey BETWEEN D1 AND D2
    à la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * From TypeA where (MasterKey >= D1) et (MasterKey <= D2)
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Merci pour l'info.
    Je croyais BETWEEN reserver au numériques, et ne l'ai donc pas utilisé.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/02/2009, 09h07
  2. Réponses: 13
    Dernier message: 19/12/2008, 14h32
  3. pb fonction avec connexion sur une table
    Par NATOU2 dans le forum VBA Access
    Réponses: 6
    Dernier message: 25/08/2008, 14h32
  4. connexion a une table postgreSQL ?
    Par aquafafa dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 27/08/2007, 12h50
  5. Réponses: 2
    Dernier message: 21/06/2007, 06h54

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