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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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