Bonjour,
J'ai une requête qui me pose problème et que je n'arrive pas à optimiser.
La voici :
voila ce que donne l'explainCode:
1
2
3
4
5
6
7
8
9 SELECT * FROM envois, task , messages, sites WHERE envois.idEnvoyeur = 1 AND envois.id = task.idEnvoi AND ( envois.status = 'ENV' OR (envois.status = 'PRG' AND envois.date_lance <= CURRENT_TIMESTAMP)) AND envois.idMessage = messages.id AND messages.idSite = sites.id ORDER BY envois.priority desc, envois.id asc, task.id asc LIMIT 0,150
INDEX sur la table taskCode:
1
2
3
4
5
6
7
8 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE task ALL idEnvoi NULL NULL NULL 754315 Using temporary; Using filesort 1 SIMPLE envois eq_ref PRIMARY,date_lance PRIMARY 4 task.idEnvoi 1 Using where 1 SIMPLE messages eq_ref PRIMARY PRIMARY 4 envois.idMessage 1 1 SIMPLE sites eq_ref PRIMARY PRIMARY 4 messages.idSite 1
Je ne suis pas trés familier avec l'EXPLAIN mais,Code:
1
2
3
4 Nom de l'index Type Cardinalité Champ PRIMARY PRIMARY 741565 id idEnvoi INDEX 5 idEnvoi
ce que je ne comprend pas c'est que j'ai l'impression que la clé idEnvoi (index sur la table task) n'est pas utilisée, et que toute la table est balayée.
Est-ce que vous avez une idée ?
Merci pour votre aide.