MYSQL n'utilise pas l'index

WRInaute passionné
Bonjour, j'ai un problème avec mysql, et je ne comprends pas d'ou il vient.

J'ai une table TABLE
avec deux champs
id mediumint(6) AUTO_INCREMENT
date int(10)

et des indexes associés
PRIMARY associé à id
date associé à date

Si je fais
EXPLAIN SELECT id FROM sorties WHERE id>=un_id l'index sur ID est bien utilisé

alors que
EXPLAIN SELECT id FROM sorties WHERE date>=une_date l'index sur DATE n'est pas utilisé


Auriez vous une explication ?

Merci
 
WRInaute accro
Peut être parce que date ne figure pas dans la sortie demandée sur la seconde requête (suis pas spécialiste).
Essaie pour voir un truc du genre :
EXPLAIN SELECT id,date FROM sorties WHERE date>=une_date
 
WRInaute passionné
Merci, mais non, ce n'est pas ça. Peu importe les champs récupérés en fait, le problème se situe lors de la sélection des lignes...
Comprends pas...
 
WRInaute impliqué
Quelques pistes :
Peut etre un rapport avec le nom du champs date ?
Bizarre aussi d'avoir un champs date de type int ?
Tiens nous au courant si tu trouves la raison, car c'est vrai que c'est bizarre.
 
WRInaute accro
f_trt a dit:
Bizarre aussi d'avoir un champs date de type int ?
les timestamps unix c'est des int ... mais par contre la piste du champ appelé "Date" est pas idiote je me souviens avoir eu des souci avec des champs utilisant des mot réservés.
 
WRInaute passionné
Merci pour vos réponses. J'ai poussé un peu plus les tests

Code:
SELECT date FROM sorties WHERE date>=ma_date
il utilise bien l'index

par contre si je fais
Code:
SELECT id, date FROM sorties WHERE date>=ma_date
il n'utilise PAS l'index

ou si je fais
Code:
SELECT date FROM sorties WHERE date>=ma_date AND id>mon_id
il n'utilise PAS l'index

Sois j'ai rien compris aux index, soit j'ai rien compris aux index. Comment faire pour forcer l'utilisation des index dans les 2 derniers cas (ma table SORTIES commence à être bien conséquente, et ce type de requête apparaît dans le slowlog de mySQL)
 
WRInaute impliqué
Tu peux forcer l'utilisation de certain index. Essaie:
Code:
SELECT id, date FROM sorties WHERE date>=ma_date USE INDEX(date)
 
WRInaute passionné
@zeb: Mes index sont différents
@Bount, la requête semble être
Code:
SELECT id, date FROM sorties USE INDEX(date) WHERE date>=ma_date
mais ne semble pas changer quoi que ce soit...
 
WRInaute passionné
Quand j'essaye sur ma version de mysql (4.1.9), ça fonctionne. Donc voir si ta version n'a pas un problème, par exemple sur le fait que tu utilises comme index et comme nom un mot réservé (date). Tu peux toujours faire cloner ta table en changeant le nom du champ et de l'index pour voir si c'est mieux en les appelant autrement.
Mais chez moi "explain SELECT id, date FROM `sorties` WHERE date>=1" me dit bien que ça peut utiliser l'index "date".
Ou peut être as tu un problème dans la gestion des index ? Faire un "OPTIMIZE TABLE sorties" pour les reconstruire correctement.
Ou nous passer la structure complete de la table qu'on voit ce qui bloque.
 
Discussions similaires
Haut