antouane Posté 9 Janvier 2007 Partager Posté 9 Janvier 2007 Hello suite a des problemes de ralentissement serveur, je suis en train d essayer d optimiser le mieux possible mes requetes je suis sur MySQL 3 voici une des requetes que je retrouve dans mon slow-query.log SELECT count( * ) AS PAGEFROM ANNONCES a, DEPARTEMENT b, REGION c, AGENCES dWHERE a.IDDEPARTEMENT = b.IDDEPARTEMENTAND b.IDREGION = c.IDREGIONAND d.IDAGENCE = a.IDAGENCEAND a.ACTIF =1AND b.ACTIF =1AND c.ACTIF =1AND c.IDREGION = '16'AND b.IDDEPARTEMENT LIKE '%'AND ((NOT (a.DESCRIPTIONLONGUE = ''))OR (a.LOCA =1))AND d.ACTIF =1ORDER BY DATE DESC voici le explain : table type possible_keys key key_len ref rows Extrac const PRIMARY,ACTIF PRIMARY 8 const 1 a ALL IDDEPARTEMENT,IDAGENCE,ACTIF,LOCA NULL NULL NULL 8224 where usedb eq_ref PRIMARY,IDREGION,ACTIF PRIMARY 8 a.IDDEPARTEMENT 1 where usedd eq_ref PRIMARY,ACTIF PRIMARY 8 a.IDAGENCE 1 where used je ne comprends tres bien comment cela marche j ai bien mes index sur tous les champs apres le WHERE peut etre que c est un cas particulier car c est un COUNT* merci de m eclairer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 9 Janvier 2007 Partager Posté 9 Janvier 2007 A quoi te sert ceci: AND b.IDDEPARTEMENT LIKE '%' ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 9 Janvier 2007 Partager Posté 9 Janvier 2007 Bonjour, De plus, afin d'optimiser un maximum, essaie la syntaxe avec es "inner join". Portekoi Lien vers le commentaire Partager sur d’autres sites More sharing options...
antouane Posté 10 Janvier 2007 Auteur Partager Posté 10 Janvier 2007 en fait j ai un : AND b.IDDEPARTEMENT LIKE '$variable'% donc quand $variable est vide, cela donne le LIKE % effectivement ce n'est pas tres propre, je vais donc arranger ca merci je vais regarder du cote des INNER JOIN egalement thanx Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spidetra Posté 10 Janvier 2007 Partager Posté 10 Janvier 2007 (modifié) Tu peux aussi supprimmer la table region de ta requete qui ne sert à rien, et la jointure entre region et departement. Dans ta requete tu remplace c.IDREGION = 16 par b.IDREGION = 16 Modifié 10 Janvier 2007 par Spidetra Lien vers le commentaire Partager sur d’autres sites More sharing options...
antouane Posté 10 Janvier 2007 Auteur Partager Posté 10 Janvier 2007 (modifié) yes merci du conseil c est vrai que ce n est qu un count * donc je n ai pas besoin apres dans mes traitements de la table Region par contre j'ai quand meme : AND c.ACTIF =1 il faut que je m assure que pour toutes ces lignes, ma REGION c n'est pas desactivee, et ca je ne peux pas le voir juste avec la table Departement donc je pense qu il faut que je garde quand meme Region dans cette jointure il me semble Modifié 10 Janvier 2007 par antouane Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant