Bonjour à tous,
Je suis dans un cas qui me surprend avec mysql MyISAM.
J'ai une table avec id,login,pseudo (enfin pour simplifier) sur laquelle j'ai 3 clés : primaire sur id, unique sur login et pseudo. Quand je fais cette requette :
explain SELECT id FROM `users` WHERE (login like 'toto' or pseudo like 'titi') AND id<>10
J'ai :
1 SIMPLE users ALL PRIMARY,login,pseudo NULL NULL NULL 90775 Using where
On voit qu'il parcours la totalité de la table (90775 enregistrements). Ce qui biensur n'est pas l'idéal pour l'optimisation.
si je vire le test du id<>10 :
explain SELECT id FROM `users` WHERE (login like 'toto' or pseudo like 'titi')
Alors pas de soucis :
1 SIMPLE users index_merge login,pseudo login,pseudo 18,18 NULL 2 Using union(login,pseudo); Using where
Je ne comprend pas pourquoi mysql n'utilise plus les index quand j'ajoute ce AND. Ce n'est pas tres grave puisque il me suffit de la faire sans le AND et de tester les resultats derriere.
Mais je ne saisi pas bien le comportement. Est-ce que quelq'un aurait une explication ?
Merci à vous.
Partager