Une requette trop longue >> 'Explain' peut il m'aider?

Une requette trop longue >> 'Explain' peut il m'aider? - SQL/NoSQL - Programmation

Marsh Posté le 20-10-2005 à 12:48:57    

Bonjour a tous,
la requete suivante est beaucoups trop longue à executer, alors que les champs necessaires sont tous indexes.
 
 explain SELECT DISTINCTROW FilmNeutre.NoIntFN, FilmNeutre.NoMereGen, FilmNeutre.CodeMatiere, FilmNeutre.Laize, FilmNeutre.Epaisseur, FilmNeutre.NoDossier, Dossiers.CodeClient, Dossiers.CodeArticle, FilmNeutre.Machine, FilmNeutre.NoIntProprietaire, FilmNeutre.CodeAide, FilmNeutre.CodeCond, FilmNeutre.RebutTotal, FilmNeutre.PoidsRebut, FilmNeutre.TypeSortie, Dossiers.NoCmdClient, Dossiers.QuantPoids, Dossiers.QuantNbre, Dossiers.QuantSurf, Dossiers.QuantLong FROM Dossiers INNER JOIN FilmNeutre ON Dossiers.NoDossier = FilmNeutre.NoDossier LEFT JOIN LiensAmont ON FilmNeutre.NoIntFN = LiensAmont.NoAmont WHERE (((FilmNeutre.TypeSortie)=1 Or FilmNeutre.TypeSortie=6) AND ((LiensAmont.NoAmont) Is Null)) ORDER BY FilmNeutre.NoDossier, FilmNeutre.NoIntFN ;  
 
Elle met 22 sec en moyenne a se lancer sous mysql et sous access(avec des donnees et une structure similaire) elle met moin de 5 sec.
 
Apres plusieurs heures de recherches je n'ai toujours pas su trouver d'ou cela pouvait bien provenir.
J'ai donc fait un explain de ma requete et le resultat est le suivant:
 
id select_type table          type  possible_keys key         key_len    ref                               rows    Extra
1  SIMPLE       Dossiers     ALL    PRIMARY       NULL       NULL        NULL                            22689   Using temporary; Using filesort
1  SIMPLE       FilmNeutre  ref     NoDossier      IX_9       11           stock.Dossiers.NoDossier  2         Using where
1  SIMPLE       LiensAmont ref     NoAmont       NoAmont 5             stock.FilmNeutre.NoIntFN 2         Using where; Using index; Distinct
 
Ma question est la suivante: pour le champ Nodossier qui est une clef primaire, je ne dois pas faire d'index puisqu'une clef primaire  
est automatiquement indexe (si je ne me trompe pas).
Or le resultat que me sort explain m'inquiete puisque dans les colones key, key_len et ref, les valeurs sont a NULL comme vous pouvez le voir.
Est ce normal que l'on ne voit pas le champ clef primaire apparaitre au lieu des valeurs NULL....
 
Cela expliquerait donc pkoi ma requette est si longue a s'executer...
pour que ceci soit corrige quelle conseil me donnez vous?
 
 
merci encore
 
--  
Ben younes Ousama  
- Epitech 5eme annee
- Ingenieur developpement A2I (Alliance Internationale Informatique)
- Web: http://www.noofs.com  

Reply

Marsh Posté le 20-10-2005 à 12:48:57   

Reply

Marsh Posté le 20-10-2005 à 17:24:42    

ta requète est vraiment mal foutue :S
 
Pour optimisé une requete, faut faire des index sur les primary keys et sur les reference keys.
Ensuite, l'utilisation de l'opérateur EXISTS (corrélation) accélère également les requètes sql (quand on sait utiliser cette opérateur correctement)...
 
dernière question? c'est quoi ton basard "explain" j'ai encore jms vu ça de ma vie en SQL, ni sous access, ni sous sqlserver, ni sous oracle, ni sous mysql. Donc ça sort d'ou?

Reply

Marsh Posté le 20-10-2005 à 17:47:30    

Pour info explain est une fonction propre a mysql:
http://dev.mysql.com/doc/refman/5.0/fr/explain.html
 
Pour le reste ta reponse ne m'apporte pas beaucoups de lumiere sur la suite
en fait ce message est surtout adressé à des personnes maitrisant les messages
retournes par le fonction explain de mysql
car grace à son retour on peut surement comprendre pourquoi ma requette est aussi lente.
 
Merci quand meme pour ta reponse meme si elle est un peu agressive à mon gout lol.
 
 
--  
Ben younes Ousama  
- Epitech 5eme annee
- Ingenieur developpement A2I (Alliance Internationale Informatique)
- Web: http://www.noofs.com


Message édité par ous_a2i le 20-10-2005 à 17:48:53
Reply

Marsh Posté le 20-10-2005 à 17:58:25    

ah oui je vois ce que ça fais ce truc!
 
ben si je t'ai dis comment améliorer ta requète... Combien de record à tu dans tes tables afin que je me fasse une petit idée ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed