Ich und unser Team haben ein seltsames Problem mit MySQL-Abfragen. Wir verwenden eine SELECT
Anweisung mit einer COUNT
und aus irgendeinem Grund ist es ziemlich "schnell" in dem Client, den wir verwenden (SQLyog), aber es ist wirklich langsam, wenn wir PHP verwenden.Abfrage langsam in PHP aber schnell in Client
Wir haben versucht, die alte mysql_query(), die mysqli-Erweiterung zu verwenden, und wir haben auch versucht, PDO zu verwenden, aber alle machten keinen Unterschied.
Auf anderen Posts hier auf Stackoverflow fanden wir, dass es ein DNS-Problem sein könnte, und dass es mit 'Skip_name_resolve' in der my.ini behoben werden konnte, aber wir hatten dies bereits in unserer Konfiguration.
Timed Ergebnisse:
Kunde: 2,092 sec PHP: 9,1071 sec
Dies ist die Abfrage, die wir verwenden:
SELECT SQL_NO_CACHE
COUNT(m.mm_id) AS total
FROM
db.media_multimedia m
WHERE m.cat_id IN
(SELECT
mc.cat_id
FROM
db.media_multimedia_category mc
WHERE mc.cat_active = 1)
AND m.mm_published = 1
AND (
m.mm_title LIKE "%denniy%"
OR m.mm_text LIKE "%denniy%"
OR m.mm_id IN
(SELECT
a.mm_id
FROM
db.`media_tag_multimedia` a
LEFT JOIN media.`media_tag` b
ON a.`tag_id` = b.tag_id
WHERE b.tag_name LIKE "%denniy%")
)
AND m.mm_publishing_date >= "2012-04-24 00:00:00"
AND m.mm_publishing_date <= "2013-04-24 23:59:59" ;
* HINWEIS: für diesen Testfall fügten wir SQL_NO_CACHE zur Abfrage, um sicherzustellen, dass immer eine neue Ergebnismenge abgerufen wird. *
Wir sind mit dem folgenden PHP und MYSQL Versionen:
MySQL: 5.1.61 PHP: 5.3.3
Irgendwelche Vorschläge, dieses Problem zu beheben?
Bitte zeigen Sie Ihren PHP-Code. –
Können Sie Ihre Abfrage in einer Textdatei speichern und den folgenden Code auf demselben Computer ausführen, auf dem sich Ihr PHP-Skript befindet: 'time mysql --user = user --password = übergeben Sie file_get_contents ("query.sql"))); '' und sehen, ob es einen Zeitunterschied gibt? –
core1024
Können Sie überprüfen, ob Sie SQLyog von demselben Computer aus ausführen, auf dem Ihr PHP gehostet wird? Wenn Sie von zwei verschiedenen Hosts eine Verbindung zu Ihrem mySql-Server herstellen, könnte dies einen Unterschied erklären. Zeigen Sie uns den PHP-Code? – Sepster