Bonjour,
quelques questions vis à vis d'une tentative d'optimisation de requête :
1) si je comprends bien, mysql n'utilise, pour une requête, qu'UN seul index par table ? (dans une jointure par ex)
exemple :
1 2 3 4 5
|
select * from articles
where status = 1
and supprime = 0
and source = 'web' |
A supposer que j'ai 3 index sur ces 3 champs du where, seul 1 des trois sera utilisé ? (sauf si je fais un "triple index (status / supprime / source )"
2) de ce fait si j'ai une table avec 30 champs, et un where avec 5 conditions, toutes sur des champs indexés, ça ne sert absolument à rien il n'en utilisera qu'un au final ?
3) la solution serait de faire des index multiples, mais en soi ça n'a pas trop de sens ça reviendrait à faire un index groupant tous les champs de la table ? donc ce n'est pas une solution... Je n'ai pas que cette requête là, potentiellement une 15ène ... qui utilise encore d'autres "and profil <> ça" etc.
4) est-ce que ça a un sens de mettre un index sur un champ datetime ? (ça fait 1 enregistrement différent par article ?)
Est-ce que cet index est utile si par exemple je fais
select * from article where date > '2010-07'
?
5) je veux faire un "order by date". Date étant un datetime.
Problème : j'arrive systématiquement à "Using temporary; Using filesort" ..
pourtant le champ date est indexé.. mais il en utilise un autre
c'est un table qui contient ~160 000 données & représente 500 megas. (des champs TEXT..)
merci
Partager