Index qui n'est pas utilisé

Résolu/Fermé
Erwan18 Messages postés 6 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 8 octobre 2014 - 7 oct. 2014 à 11:57
Erwan18 Messages postés 6 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 8 octobre 2014 - 8 oct. 2014 à 10:12
Bonjour,

J'ai un souci avec un index sur une table MySQL qui n'est pas utilisé systématiquement dans une requête.

J'ai une table nommée ENTREPOSAGE qui contient 93535 lignes et 75 champs, dont celui-ci :
Valide enum('N','O') NOT NULL DEFAULT 'N'

J'ai créé cet index :
Nom    Type  Unique Compressé Colonne Cardinalité Null
Valide BTREE Non Non Valide 1 Non

Quand j'exécute cette requête :
EXPLAIN SELECT * FROM entreposage WHERE Valide = 'O'
je constate que l'index est bien utilisé :
id select_type table       type possible_keys key    rows extra
1 SIMPLE entreposage ref Valide Valide 69 Using index condition

Mais quand j'exécute celle-ci :
EXPLAIN SELECT * FROM entreposage WHERE Valide = 'N'
l'index est ignoré :
id select_type table       type possible_keys key  rows  Extra
1 SIMPLE entreposage ALL Valide NULL 93535 Using where

Je ne comprends pas pourquoi :-(

Quelqu'un peut-il m'aider ? Merci !



1 réponse

Erwan18 Messages postés 6 Date d'inscription vendredi 22 juillet 2005 Statut Membre Dernière intervention 8 octobre 2014
8 oct. 2014 à 10:12
J'ai trouvé la réponse dans la doc MySQL :

Notez que dans certains cas, MySQL ne va pas utiliser un index, même s'il y en a un disponible. Si l'utilisation de l'index requiert que MySQL accède à plus de 30% des lignes de la table (dans ce cas, un scan de table est probablement plus rapide, et demandera moins d'accès disques). Notez que si une telle requête utilise la clause LIMIT pour ne lire qu'une partie des lignes, MySQL utilisera tout de même l'index, car il va trouver plus rapidement les quelques lignes de résultat.
0