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 :

Performance interprêter EXPLAIN


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut Performance interprêter EXPLAIN
    Bonjour,

    Le serveur mysql sur une requête à fait un shutdown.

    Cette requête fonctionne très bien en environnement de test (les volumes sont faible). Mais en environnement de production c'est la cata.

    Voici la requête :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    SELECT utilisateur_dossiers.id_user, user_initial, compte_etat_civil.id_compte, compte_num_dos, compte_civilite_id, compte_nom, compte_prenom, compte_etat_civil.id_trt, count(compte_etat_civil.id_compte) AS dossier, count(compte_mesures.id_compte) AS mesure, count(compte_activite.id_compte) AS activite, count(compte_document_id.id_compte) AS identite, count(compte_adresses.id_compte) AS adresse, count(compte_securite_sociale.id_compte) AS secu, count(compte_mutuelle.id_compte) AS mutuelle, count(compte_ayants_droits.id_compte) AS ayantdroit, count(compte_revers_entete.id_compte) AS reversement, count(compte_handicap.id_compte) AS handicap, count(compte_caf_prestations.id_compte) AS caf, count(compte_tiers.id_compte) AS tiers , count(compte_banque_compte.id_compte) AS banque, count(compte_assurance.id_compte) AS assurance, count(compte_patrimoine.id_compte) AS patrimoine, count(compte_cloture.id_compte) AS cloture, count(compte_pub_log.id_compte) AS publipostage, count(compte_budgets.id_compte) AS budget, count(compte_banque_mvt.id_compte) AS mvtbque 
    FROM utilisateur_dossiers 
    LEFT OUTER JOIN utilisateur 
    	ON utilisateur_dossiers.id_user=utilisateur.id_user 
    LEFT OUTER JOIN compte_etat_civil 
    	ON utilisateur_dossiers.id_compte=compte_etat_civil.id_compte 
    LEFT OUTER JOIN compte_mesures 
    	ON utilisateur_dossiers.id_compte =compte_mesures.id_compte 
    	AND compte_mesures.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_activite 
    	ON utilisateur_dossiers.id_compte = compte_activite.id_compte 
    	AND compte_activite.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_document_id 
    	ON utilisateur_dossiers.id_compte = compte_document_id.id_compte 
    	AND compte_document_id.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_adresses 
    	ON utilisateur_dossiers.id_compte = compte_adresses.id_compte 
    	AND compte_adresses.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_securite_sociale 
    	ON utilisateur_dossiers.id_compte = compte_securite_sociale.id_compte 
    	AND compte_securite_sociale.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_mutuelle 
    	ON utilisateur_dossiers.id_compte = compte_mutuelle.id_compte 
    	AND compte_mutuelle.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_ayants_droits 
    	ON utilisateur_dossiers.id_compte = compte_ayants_droits.id_compte 
    	AND compte_ayants_droits.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_revers_entete 
    	ON utilisateur_dossiers.id_compte = compte_revers_entete.id_compte 
    	AND compte_revers_entete.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_handicap 
    	ON utilisateur_dossiers.id_compte = compte_handicap.id_compte 
    	AND compte_handicap.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_caf_prestations 
    	ON utilisateur_dossiers.id_compte = compte_caf_prestations.id_compte 
    	AND compte_caf_prestations.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_tiers 
    	ON utilisateur_dossiers.id_compte = compte_tiers.id_compte 
    	AND compte_tiers.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_assurance 
    	ON utilisateur_dossiers.id_compte = compte_assurance.id_compte 
    	AND compte_assurance.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_banque_compte 
    	ON utilisateur_dossiers.id_compte = compte_banque_compte.id_compte 
    	AND compte_banque_compte.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_patrimoine 
    	ON utilisateur_dossiers.id_compte = compte_patrimoine.id_compte 
    	AND compte_patrimoine.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_cloture 
    	ON utilisateur_dossiers.id_compte = compte_cloture.id_compte 
    	AND compte_cloture.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_pub_log 
    	ON utilisateur_dossiers.id_compte = compte_pub_log.id_compte 
    	AND compte_pub_log.id_trt BETWEEN '2' AND '4' 
    	AND CURDATE() > compte_pub_log.alerte_date 
    	AND compte_pub_log.alerte_date != '0000-00-00' 
    	AND compte_pub_log.alerte_valide = 0 
    LEFT OUTER JOIN compte_budgets 
    	ON utilisateur_dossiers.id_compte = compte_budgets.id_compte 
    	AND compte_budgets.id_trt BETWEEN '2' AND '4' 
    LEFT OUTER JOIN compte_banque_mvt 
    	ON utilisateur_dossiers.id_compte = compte_banque_mvt.id_compte 
    	AND compte_banque_mvt.id_trt BETWEEN '2' AND '4' 
    WHERE (CURDATE() BETWEEN gest_date_debut AND gest_date_fin 
    	OR CURDATE()>=gest_date_debut AND gest_date_fin ='0000-00-00') 
    AND utilisateur_dossiers.id_trt BETWEEN '1' AND '4' 
    AND utilisateur.id_trt BETWEEN '1' AND '4' 
    AND ( compte_etat_civil.id_trt BETWEEN '2' AND '4' 
    	OR compte_mesures.id_trt BETWEEN '2' AND '4' 
    	OR compte_activite.id_trt BETWEEN '2' AND '4'
    	OR compte_document_id.id_trt BETWEEN '2' AND '4' 
    	OR compte_adresses.id_trt BETWEEN '2' AND '4' 
    	OR compte_securite_sociale.id_trt BETWEEN '2' AND '4' 
    	OR compte_mutuelle.id_trt BETWEEN '2' AND '4' 
    	OR compte_ayants_droits.id_trt BETWEEN '2' AND '4' 
    	OR compte_revers_entete.id_trt BETWEEN '2' AND '4' 
    	OR compte_handicap.id_trt BETWEEN '2' AND '4' 
    	OR compte_caf_prestations.id_trt BETWEEN '2' AND '4' 
    	OR compte_tiers.id_trt BETWEEN '2' AND '4' 
    	OR compte_assurance.id_trt BETWEEN '2' AND '4' 
    	OR compte_banque_compte.id_trt BETWEEN '2' AND '4' 
    	OR compte_patrimoine.id_trt BETWEEN '2' AND '4' 
    	OR compte_cloture.id_trt BETWEEN '2' AND '4' 
    	OR compte_pub_log.id_trt BETWEEN '2' AND '4' 
    	OR compte_budgets.id_trt BETWEEN '2' AND '4' 
    	OR compte_banque_mvt.id_trt BETWEEN '2' AND '4' ) 
    GROUP BY utilisateur_dossiers.id_compte 
    ORDER BY compte_nom, compte_prenom
    Voici le résultat de EXPLAIN sur la requete :

    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
    table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra 
    utilisateur_dossiers	ALL	gest_date_debut,gest_date_fin,id_trt,id_user	NULL	NULL	NULL	5404	Using where; Using temporary; Using filesort
    utilisateur	eq_ref	PRIMARY,id_trt	PRIMARY	4	utilisateur_dossiers.id_user	1	Using where
    compte_etat_civil	eq_ref	PRIMARY	PRIMARY	4	utilisateur_dossiers.id_compte	1	 
    compte_mesures	ALL	NULL	NULL	NULL	NULL	2028	 
    compte_activite	ref	id_compte,id_trt	id_compte	4	utilisateur_dossiers.id_compte	1	Using where
    compte_document_id	ref	id_compte,id_trt	id_compte	4	utilisateur_dossiers.id_compte	2	Using where
    compte_adresses	ALL	NULL	NULL	NULL	NULL	2133	 
    compte_securite_sociale	ref	id_compte	id_compte	4	utilisateur_dossiers.id_compte	1	 
    compte_mutuelle	ref	id_compte	id_compte	4	utilisateur_dossiers.id_compte	2	 
    compte_ayants_droits	range	id_compte,id_trt	id_trt	1	NULL	1	Using where
    compte_revers_entete	ref	id_compte,id_trt	id_compte	4	utilisateur_dossiers.id_compte	12	 
    compte_handicap	ref	id_compte,id_trt	id_compte	4	utilisateur_dossiers.id_compte	1	Using where
    compte_caf_prestations	ref	id_compte,id_trt	id_compte	4	utilisateur_dossiers.id_compte	1	Using where
    compte_tiers	ALL	NULL	NULL	NULL	NULL	24753	 
    compte_assurance	range	id_compte,id_trt	id_trt	1	NULL	2	Using where
    compte_banque_compte	ALL	NULL	NULL	NULL	NULL	2811	 
    compte_patrimoine	range	id_compte,id_trt	id_trt	1	NULL	3	Using where
    compte_cloture	ref	id_trt,id_compte	id_compte	4	utilisateur_dossiers.id_compte	1	Using where
    compte_pub_log	ALL	NULL	NULL	NULL	NULL	14614	 
    compte_budgets	ALL	NULL	NULL	NULL	NULL	233	 
    compte_banque_mvt	range	id_compte,id_trt	id_trt	1	NULL	1	Using where
    Comment interpréter le résultat de EXPLAIN ?

    Merci d'avance

  2. #2
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Quelques index plus tard

    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
    table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra 
    utilisateurs	ref	PRIMARY,user_fonction,id_user_trt_fonction	user_fonction	4	const	26	Using where; Using temporary; Using filesort
    utilisateurs_dossiers	ref	gest_date_debut,gest_date_fin,id_trt,id_user	id_user	4	utilisateurs.id_user	103	Using where
    compte_etat_civil	eq_ref	PRIMARY	PRIMARY	4	utilisateurs_dossiers.id_compte	1	 
    compte_mesures	ref	id_compte_trt	id_compte_trt	4	utilisateurs_dossiers.id_compte	1	Using index
    compte_activite	ref	id_compte_trt	id_compte_trt	4	utilisateurs_dossiers.id_compte	1	Using index
    compte_document_id	ref	id_compte,id_trt	id_compte	4	utilisateurs_dossiers.id_compte	2	Using where
    compte_adresses	ref	id_compte	id_compte	4	utilisateurs_dossiers.id_compte	1	 
    compte_securite_sociale	ref	id_compte	id_compte	4	utilisateurs_dossiers.id_compte	1	 
    compte_mutuelle	ref	id_compte	id_compte	4	utilisateurs_dossiers.id_compte	2	 
    compte_ayants_droits	ref	id_compte_trt	id_compte_trt	4	utilisateurs_dossiers.id_compte	12	Using index
    compte_revers_entete	ref	id_compte,id_trt	id_compte	4	utilisateurs_dossiers.id_compte	12	 
    compte_handicap	ref	id_compte,id_trt	id_compte	4	utilisateurs_dossiers.id_compte	1	Using where
    compte_caf_prestations	ref	id_compte,id_trt	id_compte	4	utilisateurs_dossiers.id_compte	1	Using where
    compte_tiers	ref	id_compte	id_compte	4	utilisateurs_dossiers.id_compte	13	Using index
    compte_assurance	range	id_compte,id_trt	id_trt	1	NULL	2	Using where
    compte_banque_compte	ref	id_compte_trt	id_compte_trt	4	utilisateurs_dossiers.id_compte	2	Using index
    compte_patrimoine	range	id_compte,id_trt	id_trt	1	NULL	3	Using where
    compte_cloture	ref	id_trt,id_compte	id_compte	4	utilisateurs_dossiers.id_compte	1	Using where
    compte_pub_log	ref	id_compte_trt	id_compte_trt	4	utilisateurs_dossiers.id_compte	10	 
    compte_budgets	ref	id_compte_trt	id_compte_trt	4	utilisateurs_dossiers.id_compte	1	Using index
    compte_banque_mvt	range	id_compte,id_trt	id_trt	1	NULL	1	Using where

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/03/2008, 13h50
  2. [maintenance][performance] Que faire comme maintenance ?
    Par woodwai dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 06/11/2003, 15h39
  3. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18
  4. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 10h37
  5. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 11h41

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