Optimisation d'un tri Mysql

WRInaute discret
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
 
WRInaute discret
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 ;)
 
WRInaute passionné
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 ...?
 
WRInaute accro
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.
 
Discussions similaires
Haut