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] Réduire le nb de lignes lues avec index Date


Sujet :

Requêtes MySQL

  1. #1
    Membre très actif
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Par défaut [Performances] Réduire le nb de lignes lues avec index Date
    Bonjour à tous,

    J'ai une table 'rendezvous' (innoDB) qui contient aujourd'hui 850000 enregistrements. J'essaye de créer les index qui vont bien afin d'optimiser la plupart des requetes.

    Le problème, c'est qu'en insérant un index par date, je trouve le nombre de lignes parcourues par le moteur beaucoup trop important.
    Voici la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    explain select id from rendezvous where DT BETWEEN '2008-01-01' AND '2008-05-30';
    Il me renvoie :
    - select_type : SIMPLE
    - type : range
    - possible_keys : DT
    - key : DT
    - rows : 384898

    Pour info, un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select count(*) from rendezvous where DT BETWEEN '2008-01-01' AND '2008-05-30';
    me retourne 282742.

    Sachant que je dois souvent faire une jointure de cette table avec d'autres, j'arrive à parcourir 50 millions de lignes (le nb de lignes parcourues pour l'autre table étant d'une bonne centaine)


    Avez-vous des idées pour optimiser cela ? Est-ce déjà optimisé ?

    Merci infiniment.

  2. #2
    Membre très actif
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Par défaut
    Rebonjour,

    En fait je vais essayer d'être plus clair.

    En faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    explain select R.id
    from rendezvous R
    ORDER BY R.DT;
    J'ai
    - rows=860957 (normal à priori)
    - type : index
    - key : DT
    - Extra : using index


    En faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    explain select R.id
    from rendezvous R
    where IDLIEU IN (SELECT ID from lieu where IDTABLEX=29)
    ORDER BY R.DT;
    J'ai
    (table rendezvous)
    - toujours rows=860957
    - type : index
    - key : DT
    - Extra : using Where
    (table lieu)
    - rows=1
    - type : unique_subquery
    - key : PRIMARY
    - Extra : using Where


    J'ai essayé de me laisser tenter par une jointure, ça réduit un peu le nombre de lignes parcourues, mais là c'est la catastrophe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    explain select R.id
    from rendezvous R
    left join lieu L on (R.IDLIEU=L.ID)
    where L.IDTABLEX=29
    ORDER BY DT;
    J'ai
    (table lieu)
    - rows = 38
    - type : ref
    - possible keys : PRIMARY, IDTABLEX
    - key : IDTABLEX
    - Extra : using where; Using temporary; using filesort;
    (table rendezvous)
    - rows = 2240
    - type : ref
    - key : IDLIEU
    - Extra : using Where


    J'aimerais pouvoir avoir le nombre de rows de la dernière (38*2240=85120, optimisé ? mieux que 842257 en tous cas), et éviter de passer par des temporary table et filesort en tous genres.

    Est-ce possible ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/03/2006, 13h53
  2. compteur de ligne excel avec filtre
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/12/2005, 11h04
  3. retour ligne intélligent avec l'utilisation de DIV
    Par bébé dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 22/08/2005, 17h46
  4. lignes 3d avec d3dx
    Par izbad dans le forum DirectX
    Réponses: 12
    Dernier message: 21/04/2005, 15h31
  5. Génération de lignes entières avec TEXT_IO.PUT
    Par ludo.guy dans le forum Oracle
    Réponses: 9
    Dernier message: 13/10/2004, 15h28

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