J'ai un serveur web local EasyPHP avec Apache, PHP et MySQL. Jusqu'à présent, j'ai travaillé avec une base de données qui a seulement 500 enregistrements. Parfois, lors de l'interrogation de la base de données, il y aurait un gros retard, peut-être environ 10 secondes, avant que les données ne soient renvoyées, mais elles n'étaient pas cohérentes. Peut-être que chaque 10e recherche d'utilisateur se produirait. Aujourd'hui, j'ai chargé un tas de données de test dans 6 tableaux. Chaque table a maintenant environ 15 000 enregistrements. Maintenant, lors de la recherche d'utilisateurs, il faut environ 25 secondes pour que les données soient retournées et se produisent à chaque fois.Requête SQL extrêmement lente dans l'application web Kohana sur le serveur EasyPHP win7
Voici la requête SELECT:
SELECT SQL_CALC_FOUND_ROWS criteria.id, criteria.uid
FROM user_profile
INNER JOIN criteria ON (criteria.id = user_profile.cid)
WHERE ((criteria.city = 250)
AND (user_profile.dob BETWEEN STR_TO_DATE('1978-09-27', '%Y-%m-%d')
AND STR_TO_DATE('1993-09-27', '%Y-%m-%d'))
AND (criteria.gender = 2)
AND (EXISTS(SELECT id FROM criteria_interests
WHERE cid = user_profile.cid AND value = 1)
OR EXISTS(SELECT id FROM criteria_interests
WHERE cid = user_profile.cid AND value = 2)))
AND (user_profile.uid != 2)
LIMIT 0, 18
Cette requête prend environ 25 secondes pour revenir 202 résultats. Si j'exécute cette requête dans phpMyAdmin, elle se charge instantanément.
Je ne sais pas où est la retenue. Je sais que SQL_CALC_FOUND_ROWS
peut parfois provoquer des ralentissements, mais pas 25 secondes pour retourner 202 lignes. Quelque chose cloche ici. Je me demande comment je peux localiser le problème. Le retard intermittent dont j'ai parlé le premier est arrivé essentiellement depuis que j'ai installé EasyPHP, donc j'ai pensé que c'était un problème avec EasyPHP. Mais maintenant, voyant à quel point le problème s'est aggravé avec plus d'enregistrements de base de données, j'ai pensé que c'était un problème de MySQL. Cependant, lorsque j'exécute la requête dans phpMyAdmin, c'est très rapide. Donc maintenant je pense que c'est un problème PHP.
Ma limite de mémoire PHP est fixée à 128M, ce qui pourrait ne pas être beaucoup, mais cela ne causerait pas un délai de 25 secondes.
Est-ce que quelqu'un sait comment je pourrais résoudre ce problème? Je ne suis pas le plus compétent quand il s'agit de configurer Apache, PHP ou MySQL, donc je ne suis pas sûr de savoir comment s'y prendre.
Merci pour tout conseil.
Avez-vous essayé le [Kohana profiler] (http://kohanaframework.org/3.3/guide/kohana/profiling). Cela permettra au moins d'identifier si vous cherchez au bon endroit. Assurez-vous également que vous avez correctement spécifié vos index dans MySQL et envisagez d'activer le [journal de requête lente Mysql] (http://dev.mysql.com/doc/refman/5.1/fr/slow-query-log.html). –
Je ne connaissais pas le profiler! Cela m'a conduit directement à la question de problème, qui était en fait la sélection COUNT() juste après la sélection des résultats de recherche. Merci pour ça. Cela a essentiellement répondu à ma question, donc si vous mettez cela dans une réponse, je la marquerai comme acceptée. – Gavin