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 :

Optimisation requête avec jointure et surtout ORDER BY


Sujet :

Requêtes MySQL

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Optimisation requête avec jointure et surtout ORDER BY
    Bonjour, Bonsoir

    Ma requête fonctionne correctement mais j'aimerais savoir si il est possible de diminuer le temps d’exécution.

    Lorsque j'utilise aucun ORDER BY, c'est extrêmement rapide 0.016 sec.
    Par contre avec un ORDER BY sur un datetime je suis à 0.312 sec et je suis OBLIGÉ de l'utiliser.

    Vous allez peut être me dire que c'est normal mais je trouve ça énorme car c'est seulement sur 10737 résultats.
    Avec un EXPLAIN, je vois bien que ma requête utilise une table temporaire (pour un DISTINCT) et un filesort (pour mon ORDER BY). C'est surement ce filesort qui prend du temps car le reste de la requête est déjà optimisé au mieux.
    J'ai quand même 13 jointures sur la tables mais bon elles sont toutes correctes (voir l'explain, j'ai remplacé le nom de mes fk par moi)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    1	SIMPLE	E	ALL	PRIMARY...			10737	Using where; Using temporary; Using filesort
    1	SIMPLE	EG	ref	PRIMARY PRIMARY	8	moi	1	Using index; Distinct
    1	SIMPLE	G	eq_ref	PRIMARY	PRIMARY	3	moi	1	Distinct
    1	SIMPLE	SF	eq_ref	PRIMARY	PRIMARY	3	moi	1	Using where; Distinct
    1	SIMPLE	F	const	PRIMARY	PRIMARY	1	moi	1	Using index; Distinct
    1	SIMPLE	EA	ref	PRIMARY	PRIMARY	8	moi	1	Using index; Distinct
    1	SIMPLE	A	eq_ref	PRIMARY	PRIMARY	4	moi	1	Using index; Distinct
    1	SIMPLE	V	eq_ref	PRIMARY	PRIMARY	3	moi	1	Distinct
    1	SIMPLE	D	eq_ref	PRIMARY	PRIMARY	1	moi	1	Distinct
    1	SIMPLE	R	eq_ref	PRIMARY	PRIMARY	1	moi	1	Using index; Distinct
    1	SIMPLE	S	eq_ref	PRIMARY	PRIMARY	3	moi	1	Using index; Distinct
    1	SIMPLE	LA	eq_ref	PRIMARY	PRIMARY	1	moi	1	Using index; Distinct
    1	SIMPLE	LA2	eq_ref	PRIMARY	PRIMARY	1	moi	1	Using index; Distinct
    1	SIMPLE	T	eq_ref	PRIMARY	PRIMARY	4	moi	1	Using where; Distinct
    1	SIMPLE	TE	const	PRIMARY	PRIMARY	4	const	1	Using index; Distinct
    1	SIMPLE	H	ref	cle_etrangere	8	ref	1	Using index; Distinct
    Ma requête ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT SQL_NO_CACHE STRAIGHT_JOIN 
    DISTINCT(colonne) 
    FROM table E 
    INNER JOIN table EG using (clé_primaire) 
    INNER JOIN table G using (clé_primaire) 
    INNER JOIN table SF using (clé_primaire) 
    INNER JOIN table  F using (clé_primaire)
    LEFT JOIN table EA using (clé_primaire) 
    LEFT JOIN table A using (clé_primaire)	
    LEFT JOIN table V using (clé_primaire) 
    LEFT JOIN table D using (clé_primaire) 
    LEFT JOIN table R using (clé_primaire)
    LEFT JOIN table S using (clé_primaire)
    LEFT JOIN table LA ON (D.clé_primaire) = (LA.clé_primaire)
    LEFT JOIN table LA2 ON (V.clé_primaire) = (LA2.clé_primaire)	
    LEFT JOIN table T using (clé_primaire)
    LEFT JOIN table TE using (clé_primaire)
    LEFT JOIN table H using (clé_primaire) 
    WHERE F.clé_primaire=1 
    AND T.clé_primaire= 2
    AND E.DATETIME > date_sub(CURDATE(), interval 1 day) 
    ORDER BY E.DATETIME DESC
    LIMIT 20
    Dans un premier temps j'ai essayé de créer un index sur ma colonne Datetime pour voir mais c'est encore pire...
    Précision : mes id sont bien unsigned , par contre mon id principal de ma table est un BigInt
    Auriez vous une solution à proposer ?
    Dernière modification par Invité ; 26/04/2013 à 01h47.

Discussions similaires

  1. Optimisation requête avec jointure externe SQL Server
    Par ICEMAN_60 dans le forum Développement
    Réponses: 2
    Dernier message: 28/11/2011, 10h08
  2. Optimisations requête avec jointures
    Par Superskunk dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/10/2009, 11h05
  3. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum Développement
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  4. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  5. optimisation requête avec jointures externes
    Par beurtom dans le forum Oracle
    Réponses: 14
    Dernier message: 16/10/2006, 16h50

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