Bonjour à tous !!
Je vous écrit un peu désespéré car je n'ai jamais eu de telles (contre-)performances avec MySQL, et je ne sais pas du tout comment optimiser...
Voilà mon problème : j'ai un site de classement de jeux vidéo dont la base de données contient près de 2000 jeux (et ce n'est que le début), et pour chaque jeu entre 3 et 10 notes. Mon but est de faire une moyenne de ces notes et de retourner pour chaque jeu, entre autres renseignements, sa position dans la base de données.
Mes requêtes marchaient bien en prod avec une centaine de jeux, mais maintenant que l'on arrive à plusieurs milliers, chaque requête prend entre 2 et 3 secondes
Voici un exemple de requête que j'utilise :
Je sais qu'elle est assez grosse, mais il faut noter que je ne l'apelle qu'une fois par page, et que je limite toujours les résultats à 10 / 20 ou 50.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 SELECT games.name, engines.name AS console, engines.linker, games.score, games.id_game, games.img_name, comp_dev.company AS developpeur, comp_edi.company AS editeur, genres1.genre AS genre1, genres2.genre AS genre2, (SELECT COUNT(DISTINCT b.score) FROM games AS b WHERE b.score >= games.score) AS position, games.release_fr, games.release_us, games.release_jp, accounts.login, accounts.is_female, accounts.premium FROM games LEFT JOIN companies AS comp_dev ON (games.id_dev = comp_dev.id_company) LEFT JOIN companies AS comp_edi ON (games.id_edi = comp_edi.id_company) LEFT JOIN genres AS genres1 ON (genres1.id_genre = games.id_genre_1) LEFT JOIN genres AS genres2 ON (genres2.id_genre = games.id_genre_2) INNER JOIN engines ON (games.id_engine = engines.id_engine) INNER JOIN accounts ON (games.id_add = accounts.id_acc) WHERE games.visible = '1' ORDER BY position DESC LIMIT 10
Est ce que quelqu'un peut me dire ce qui ne va pas ? Comment pourrais je faire pour optimiser cela ? Y'a t'il seulement une solution, ou mon site est il destiné à ramer, notament en période de pointe ?
Je vous remercie pour votre aide !
Partager