PHPWiki a une requête lente de 5 secondes chaque fois que vous enregistrez une modification de page. La requête pris souvent dans le « mysql-slow.log » est:Requête MySQL lente. Que devrais-je indexer?
INSERT INTO wikiscore
SELECT w1.topage, COUNT(*)
FROM wikilinks AS w1, wikilinks AS w2
WHERE w2.topage=w1.frompage
GROUP BY w1.topage;
Les indices actuels sont les suivants:
table "wikilinks" has a primary index on "frompage" and "topage"
table "wikiscore" has a primary index on "pagename" and "score"
Comment pourrais-je reformuler la requête SELECT pour revenir plus rapidement les mêmes résultats? Comment pourrais-je changer les index afin que cette requête soit plus rapide? Ma pensée est qu'elle pourrait être sur-indexée?
J'ai chronométré le résultat de la partie SELECT de la requête seulement et cela prend 1-2 secondes seul. L'INSERT doit prendre le reste de ce temps.
Il y a un décalage lors de l'enregistrement des pages que je voudrais éliminer. Je n'ai pas la possibilité de passer à un autre moteur wiki (ou une version de PHPwiki) en raison de la quantité de modifications qui ont été faites.
Des idées?
modifier ---
Les résultats de « Explain » sur la partie SELECT de la requête sont les suivants:
SIMPLE
w2
index
PRIMARY
204
31871
Using index; Using temporary; Using filesort
SIMPLE
w1
ref
PRIMARY
PRIMARY
102
phpwiki.w2.topage
14
Using index
Le journal des requêtes lentes dit maintenant: # Query_time: 4 Lock_time: 0 Rows_sent: 0 Rows_examined: 416659 avant changé l'indice (voir les commentaires ci-dessous) ce journal a déclaré: # Query_time: 5 Lock_time: 0 Rows_sent: 0 Rows_examined: 445641 – jjclarkson