Bonjour,
J'ai une requête pourtant simple sur mon site, mais qui est vraiment très lente suite à la liaison avec une seconde table et j'aimerai savoir si je peux améliorer cela.
J'ai une table personnalites avec 80000 entrées et une table personnalites_pays avec 82000 entrées, car une personnalité peut avoir plusieurs pays.
personnalites
- id
- nom
id =>PRIMARY KEY
nom => INDEX
personnalites_pays
- id_personnalite
- id_pays
id_pays => INDEX
id_personnalite => INDEX
id_personnalite + id_pays => PRIMARY KEY
Ma requete est toute bête : je liste les personnalités en filtrant par un pays, avec une pagination (affichés 50 par 50), et ordonné par nom.
SELECT p.nom FROM personnalites AS p, personnalites_pays AS pp WHERE p.id = pp.id_personnalite AND pp.id_pays = 1 GROUP BY p.id ORDER BY p.nom ASC LIMIT 50000,50
Cette requête mets généralement plus de 2 secondes :/ (vérifié avec SQL_NO_CACHE)
J'ai vérifié avec EXPLAIN j'ai bien la key id_pays de personnalite_pays d'utilisée pour la jointure et la primary key id pour la table personnalites
Si j'enlève le ORDER BY p.nom, ça descend autour de 0.5s
Si j'enlève la jointure avec la table des pays, ça descend autour de 0.4s
Mes deux tables sont en MyISAM.
Le serveur dédié est pas mal pourtant (un ovh à 170€ par mois et la BDD tourne sur un SSD) c'est la seule requête lente que j'ai car la table personnalites est conséquente maintenant.
Est ce que c'est optimisable ?
Merci.
Partager