Version complète: sur le forum Webmaster Hub : Index dans une requête
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
antouane
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

CODE
SELECT count( * ) AS PAGE
FROM ANNONCES a, DEPARTEMENT b, REGION c, AGENCES d
WHERE a.IDDEPARTEMENT = b.IDDEPARTEMENT
AND b.IDREGION = c.IDREGION
AND d.IDAGENCE = a.IDAGENCE
AND a.ACTIF =1
AND b.ACTIF =1
AND c.ACTIF =1
AND c.IDREGION = '16'
AND b.IDDEPARTEMENT LIKE '%'
AND (
(
NOT (
a.DESCRIPTIONLONGUE = ''
)
)
OR (
a.LOCA =1
)
)
AND d.ACTIF =1
ORDER BY DATE DESC


voici le explain :


CODE
table       type       possible_keys       key       key_len       ref       rows       Extra
c     const     PRIMARY,ACTIF     PRIMARY     8     const     1     
a     ALL     IDDEPARTEMENT,IDAGENCE,ACTIF,LOCA     NULL     NULL     NULL     8224     where used
b     eq_ref     PRIMARY,IDREGION,ACTIF     PRIMARY     8     a.IDDEPARTEMENT     1     where used
d     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
Dan
A quoi te sert ceci:
CODE
AND b.IDDEPARTEMENT LIKE '%'
?
Portekoi
Bonjour,

De plus, afin d'optimiser un maximum, essaie la syntaxe avec es "inner join".



Portekoi
antouane
en fait j ai un :

CODE
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
Spidetra
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
antouane
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 :

CODE
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
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.