Io e il nostro team stiamo riscontrando uno strano problema con le query MySQL. Usiamo una dichiarazione SELECT
con un COUNT
e per qualche motivo è abbastanza "veloce" nel client che usiamo (SQLyog), ma è davvero lento quando usiamo PHP.Domanda lenta in PHP ma veloce nel client
Abbiamo provato a utilizzare l'antica mysql_query(), l'estensione mysqli e abbiamo anche provato a utilizzare PDO ma non tutti hanno fatto la differenza.
Su altri post qui su Stackoverflow abbiamo rilevato che potrebbe trattarsi di un problema DNS e che potrebbe essere risolto utilizzando "skip_name_resolve" nel file my.ini ma questo era già presente nella nostra configurazione.
risultati Timed:
Cliente: 2.092 sec PHP: 9,1071 sec
Questa è la query usiamo:
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" ;
* NOTA: per questo testcase abbiamo aggiunto SQL_NO_CACHE alla query per assicurarci di recuperare sempre un nuovo set di risultati. *
Stiamo utilizzando il seguente PHP e le versioni di MySQL:
MySQL: 5.1.61 PHP: 5.3.3
Qualsiasi suggerimento per risolvere questo problema?
Si prega di mostrare il codice php. –
Puoi salvare la tua query in un file di testo ed eseguire il seguente codice sulla stessa macchina in cui si trova lo script PHP: 'time mysql --user = utente --password = pass file_get_contents ("query.sql"))); " e vedere se c'è qualche differenza di orario? –
core1024
Puoi verificare che stai utilizzando SQLyog dalla stessa macchina che ospita il tuo PHP? Se ti connetti al tuo server mySql da due host diversi, ciò potrebbe spiegare la differenza _some_. Mostraci il codice PHP? – Sepster