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 :
Et un explain me donne :
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;
La table search_word_list contient 200 000 enregistrements
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_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
Partager