Bonsoir à tous.
J'ai un bdd de 3M d'entrée. Elle possède 4 tables :
- videos (contenant des id de thumbs)
- link_tags (contenant des id de videos et de tag)
- tags (contenant des tags)
- thumbs (contenant des id videos et adresse de thumbs)
Je crois que ça doit déjà vous dire quelques chose. Je souhaite faire une recherche de vidéos selon des tags donnés dans ma requête SQL. Voici la requête que j'exécute :
Elle me semble correcte mais lourde tout de même, ça se vérifie, une requête prend 5 secondes sur un serveur dédié Linux 64bits 4Core 2.67Ghz et 16go de ram. Le query_cache_size est à 128M.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT v.* FROM videos v INNER JOIN ( SELECT lt.ID_VIDEO FROM link_tags lt INNER JOIN videos v ON v.id = lt.ID_VIDEO INNER JOIN tags t ON t.ID = lt.ID_TAG WHERE t.tag IN ('TAGS', 'TAGS') ) GROUP BY lt.ID_VIDEO HAVING Count(lt.ID_VIDEO) = *nbrTags*) vv ON v.ID = vv.ID_VIDEO
Le problème c'est que mes capacités en mysql ne me permettent pas une optimisation plus efficace ... Vous auriez des idées ? Peut être une nouvelle organisation de la bdd ? Si oui, comment faire autrement ?
Je vous remercies par avance !![]()
Partager