Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2012, 11h28   #1
Membre du Club
 
Inscription : août 2009
Messages : 88
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 88
Points : 42
Points : 42
Par défaut Problème de requête pas optimisée

Bonjour, cette requete genere un temps d'attente effrayante pour mon site web. Pourriez vous m'aider a l'optimiser ?

Code :
1
2
3
4
5
6
SELECT id, title, locName, localityId, sheetName, sheetTypeId, picture1, picture2, ratingId, ratingName, capaName, capaQuantity
                                FROM resultats
                                WHERE localityId IN (".$_GET['localityId'].") AND sheetTypeId IN (".$_GET['sheetTypeId'].")";
                                AND season LIKE '%$season%'
                                GROUP BY locName, sheetName, id
                                ORDER BY rand()
Cordialement.
AlternantOracle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 11h51   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
Bonjour,

Votre group by est faux syntaxiquement (vive MySql).

Toute les colonnes de la clause SELECT, non encadrées par des fonctions d'agrégation (min, max, etc), doivent apparaitre dans le group by.


Mais vu que vous n'utilisez pas de fonction d'agrégation du tout, à quoi vous sert ce group by ?

Le réel problème va, ceci dit, surement résider dans cette condition "like (%ma_val%)"


En utilisant, un like %% vous ne pouvez pas utilisez d'index et ceci force bien souvant un scanange total de votre table.

La seule optimisation de cette requête (en dehors de votre mauvaise syntaxe, qui pourrai amener à virer totallement le group by) serai de vérifiez que vous avez bien des index sur les colones : localityId et sheetTypeId.


Ce n'est pas sur qu'il l'utilise au vu de votre autre condition (like %%), mais à essayer.
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 11h52   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
1) Un GROUP BY sans fonction de regroupement dans le SELECT ne sert à rien.
tout autre SGBD que MySQL aurait d'ailleurs refusé cette requête car toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de regroupement doivent se trouver dans le GROUP BY. Les valeurs des colonnes présentes dans le SELECT et absentes du GROUP BY seront aléatoires !

2) Est-ce que les variables PHP contiennent bien des listes qui justifient l'utilisation de IN ?

3) Estc-e que les colonnes localityId et sheetTypeId sont indexées ?

EDIT : Grilled by punkoff !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h13.


 
 
 
 
Partenaires

Hébergement Web