私と私たちのチームは、MySQLクエリに奇妙な問題を経験しています。我々はCOUNT
のSELECT
ステートメントを使用しています。何らかの理由で、私たちが使用するクライアント(SQLyog)ではかなり高速ですが、PHPを使用するとかなり遅くなります。PHPでは遅いがクライアントでは速くなる
古いmysql_query()とmysqli拡張を使用しようとしましたが、私たちもPDOを使用しようとしましたが、違いはありませんでした。
Stackoverflowの他の記事では、DNSの問題である可能性があり、my.iniの 'skip_name_resolve'を使用して修正できることがわかりましたが、私たちの設定では既にこれを持っていました。
時限結果:
クライアント:2.092秒 PHP:9.1071秒
これは、我々が使用するクエリです。注*
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" ;
:このテストケースのために、私たちは追加SQL_NO_CACHEをクエリに追加して、常に新しい結果セットを取得するようにします。*
我々は、次のPHPとMySQLのバージョンを使用している:
のMySQL:5.1.61 PHP:5.3.3
任意の提案は、この問題を解決するには?
あなたのPHPコードを表示してください。 –
あなたのクエリをテキストファイルに保存して、PHPスクリプトと同じマシン上で次のコードを実行できますか? 'time mysql --user = user --password = pass file_get_contents( "query.sql"))); php -r 'new PDO( "mysql:host = ...; dbname = ..."、 "user"、 "pass" '' 時間差があるかどうか確認してください。 –
core1024
PHPをホストしているのと同じマシンからSQLyogを実行していることを確認できますか? 2つの異なるホストからmySqlサーバーに接続している場合、その違いを説明することができます。 PHPコードを表示しますか? – Sepster