Bonjour,

Suite à la mise en place d'un petit moteur de recherche dans mon forum, je me retrouve avec quelques slow-queries.

N'étant pas très doué en MySQL je me demande où cela cloche.

Voici par exemple une requête de recherche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
SELECT fs.sujet_id
FROM sujets fs
INNER JOIN messages fm ON fm.sujet_id = fs.sujet_id
INNER JOIN search_word_match swm ON swm.message_id = fm.message_id 
INNER JOIN search_word_list swl ON swl.word_id = swm.word_id
WHERE swl.word_text IN ('restaurant','paris')
GROUP BY fs.sujet_id
HAVING COUNT(DISTINCT swl.word_text) >= 2;
Et un explain me donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra  
1 SIMPLE swl range PRIMARY,word_id PRIMARY 50 NULL 6 Using where; Using temporary; Using filesort 
1 SIMPLE swm ref message_id,word_id word_id 3 db.swl.word_id 59 Using where 
1 SIMPLE fm eq_ref PRIMARY,sujet_id PRIMARY 3 db.swm.message_id 1   
1 SIMPLE fs eq_ref PRIMARY PRIMARY 2 db.fm.sujet_id 1 Using index
La table search_word_list contient 200 000 enregistrements
La table search_word_match preque 12 millions

La requête met 15s environ à s'executer.

Je ne vois pas où il y a un probleme.

Merci pour votre aide