Optimisation d'un tri Mysql

davidtennis
WRInaute discret
WRInaute discret
 
Messages: 55
Inscription: 5 Avr 2007

Optimisation d'un tri Mysql

Message le Sam Juil 23, 2011 8:39

Bonjour,

J'ai une requête sur mon serveur mysql qui est comme ceci :
SELECT nom,age,photo FROM participants WHERE genre='1' ORDER BY numero DESC

Cette requête est extrêmement lente (0.5s) malgré le fait que dans ma table les champs genre et numero sont des entiers avec INDEX.

Je crois que ce qui est lent est le ORDER BY numero (il doit trier qqes centaines de milliers de champs). Apparemment MYSQL n'utilise pas de clé pour trier le ORDER BY quand la clé utilisée dans le WHERE est différente. Ce qui est mon cas (cf http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html)

Il faudrait pouvoir forcer MYSQL à utiliser l'INDEX numero pour trier. Auriez-vous une solution ?

Merci


IllusionPerdu
WRInaute discret
WRInaute discret
 
Messages: 141
Inscription: 11 Mar 2006

Re: Optimisation d'un tri Mysql

Message le Sam Juil 23, 2011 8:52

Peut être en faisant genre
SELECT nom,age,photo FROM participants WHERE genre='1' AND numero <> 99999999 ORDER BY numero DESC
Avec évidement le 99999999 qui est sur une valeur qui n'hésiste pas ! Avec ceci ca permet que numero soit dans le where et donc ça force l'utilisation de l'index ;)


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Re: Optimisation d'un tri Mysql

Message le Sam Juil 23, 2011 16:03

et en mettant un index sur genre+ numero ?

longo600
WRInaute impliqué
WRInaute impliqué
 
Messages: 896
Inscription: 24 Fév 2005

Re: Optimisation d'un tri Mysql

Message le Sam Juil 23, 2011 16:18

je n'utilise pas de base sql, donc, mon commentaire reste au conditionnel (j'utilise 4D depuis 20 ans, et comme je connais bien, je m'y tient).

En règle générale, si un champ est indexé, le tris doit se faire sur un index non?
le tris sur des numérique est plus rapide que sur des alpha, il me semble?

Si tu utilise un tri régulièrement et qu'un champ te pose problème, tu as la solution de faire un tris permanent sur ce champ.
Ainsi, tu n'aura plus a trier si il y a une demande de tri dessus. Ce seront les autres champs qui devront être triés par défaut.
Si je suis assez clair dans mon explication ...?


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Re: Optimisation d'un tri Mysql

Message le Sam Juil 23, 2011 16:25


jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Optimisation d'un tri Mysql

Message le Sam Juil 23, 2011 16:41

Il te faut impérativement un index sur genre et numero (un index sur les deux colonnes, dans cet ordre, pas un index sur chaque), et il te faut probablement remettre genre dans le order by (order by genre, numero).

Jacques.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité