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 :

Performances de requêtes assez étranges


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut Performances de requêtes assez étranges
    Bonjour,

    Je suis actuellement en train d'essayer d'améliorer les performances de mon logiciel qui grossit et qui commence à avoir plusieurs tables avec des milliers voir des millions de lignes...

    Je constate un truc assez bizarre, et si quelqu'un pouvait m'éclairer ca serait sympa !

    Donc je pose le décor :

    J'ai deux tables (lieu et vehicule) qui contiennent toutes deux un index sur le champ étranger CLE_PERSONNE, et différents champs dont deux datetime pour la table véhicule et 1 timestamp pour la table lieux.

    En chiffres :
    lieu : 673 000 lignes.
    vehicule : 2 100 000 lignes.

    J'effectue deux requêtes sur chacune des tables (l'une après l'autre) sur lesquelles j'ai un clause where sur CLE_PERSONNE puis sur les champ date.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  /*... 12 champs ...*/
    FROM vehicule
    WHERE DATE_DEBUT>='2010-11-04' AND DATE_DEBUT <='2010-11-11' AND CLE_PERSONNE=105 ORDER BY DATE_DEBUT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT /*... 7 champs ...*/
    FROM lieu
    WHERE DATE_CHANGE BETWEEN '2010-11-04 00:00' AND '2010-11-11 00:00' AND CLE_PERSONNE=105 ORDER BY CLE_PERSONNE, DATE_CHANGE
    J'observe un temps de réponse sur l’exécution de la requête d'environ 10ms sur la table vehicule et 50 ms sur la table lieu.... ce qui n'est pas logique pour moi ! l'inverse à la rigueur mais la je comprend pas pourquoi !

    J'ai fait des EXPLAIN pour voir :

    vehicule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    id => 1, 
    select_type => 'SIMPLE', 
    table => 'lieu',
    type => 'ref',
    possible_keys => 'CLE_PERSONNE',
    key => 'CLE_PERSONNE',
    key_len => 4,
    ref => 'const',
    rows => 3250,
    extra => 'Using where; Using filesort'
    lieu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    id => 1, 
    select_type => 'SIMPLE', 
    table => 'lieu',
    type => 'ref',
    possible_keys => 'CLE_PERSONNE',
    key => 'CLE_PERSONNE',
    key_len => 4,
    ref => 'const',
    rows => 486,
    extra => 'Using where; Using filesort'
    Tout laisse à penser que le traitement est le même, mais alors pourquoi il met plus de temps à traiter 486 lignes plutôt que 3250 quelqu'un pourrait m'expliquer ?

    J'ai pensé au fait que ce soit un timestamp et non un datetime dans la table lieu ou alors le BETWEEN (qui est à priori meilleur au niveau performance d'après ce que j'ai pu voir... mais pas la...)

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Peut être l'usage de BETWEEN dans l'une et pas l'autre ?

  3. #3
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Pourrais-t-on voir la structure des 2 tables en question?
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Bon j'aurais du essayer avant ca m'aurait pas pris longtemps mais à priori ca vient bien du between...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM lieu WHERE DATE_CHANGE >= '2010-11-04 00:00' AND DATE_CHANGE <= '2010-11-11 00:00' AND CLE_PERSONNE=105 ORDER BY CLE_PERSONNE, DATE_CHANGE
    Me donne des temps de réponse à peu près égaux à l'autre requête.

    Désolé de vous avoir fait perdre votre temps, en tout cas c'est bon à savoir que BETWEEN ne signifie pas forcément gain de performance...

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

Discussions similaires

  1. Chute des performances à chaque requête
    Par Logrus dans le forum JDBC
    Réponses: 2
    Dernier message: 03/11/2007, 13h19
  2. Probleme de police assez étrange
    Par Tusbar dans le forum VB.NET
    Réponses: 11
    Dernier message: 20/09/2007, 01h19
  3. [Débutant] Requête assez compliquée
    Par pc.bertineau dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/06/2007, 11h46
  4. [performances] 40 requêtes INSERT
    Par Tukan dans le forum Requêtes
    Réponses: 6
    Dernier message: 15/10/2006, 14h16
  5. [9.2] Performance et requêtes
    Par genio dans le forum Oracle
    Réponses: 8
    Dernier message: 17/11/2005, 09h13

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